我想删除最后两个字母形成动词并使用 StringBuilder 将其结合
I want to delete the last two letters form a verb and conjugate it using StringBuilder
一切都在评论中解释
Scanner sc=new Scanner(System.in);
//asking for the verb
System.out.println("Donnez un verbe regulier du premier groupe :");
//putting the verb in the string
String chaine=sc.nextLine();
//taking the two last elements
char first=chaine.charAt(chaine.length());
char second=chaine.charAt(chaine.length()-1);
//creating a StringBuilder:
StringBuilder sb=new StringBuilder();
//putting string in the builder :
sb.append(chaine);
//deleting the two last characters :
sb.deleteCharAt(sb.length()-1);
//printing elemnts :
System.out.println("Je "+sb.append("e"));
System.out.println("Tu "+sb.append("es"));
System.out.println("Il/Elle "+sb.append("e"));
System.out.println("nous "+sb.append("ons"));
System.out.println("vous "+sb.append("ez"));
System.out.println("Ils/Elles "+sb.append("ent"));
我得到了StringIndexOutOfBoundsException
。
我可以根据你的问题提供更多帮助。
String radical = chaine.replaceFirst("..$", "");
System.out.println("Je " + radical + "e");
System.out.println("Tu " + radical + "es");
System.out.println("Il/Elle " + radical + "e");
System.out.println("Nous " + radical + "ons");
System.out.println("Vous " + radical + "ez");
System.out.println("Ils/Elles " + radical + "ent");
这使用正则表达式 replaceFirst
。模式:
.
任意字符
.
任意字符
$
字符串结尾
因此:最后两个字母被空字符串替换。
相对于 chaine.substring(0, chaine.length() - 2)
的小优势
是对于空字符串或单字母字符串没有发生索引错误;
它没有替代。诚然 substring
更快。
您的代码充满了错误。
第一:
char first=chaine.charAt(chaine.length());
char second=chaine.charAt(chaine.length()-1);
会抛出异常,因为chaine
的最后一个字符是chaine.length()-1
。所以你应该写:
char first=chaine.charAt(chaine.length()-1);
char second=chaine.charAt(chaine.length()-2);
或者也许:
char first=chaine.charAt(chaine.length()-2);
char second=chaine.charAt(chaine.length()-1);
但你似乎没有对 first
和 second
做任何事情。
接下来,StringBuilder.append
会将参数附加到构建器,我认为这不是您不会做的。
也许你想做:
String prefix = chaine.substring(0, chaine.length()-2);
System.out.println("Je " + prefix + "e");
System.out.println("Tu " + prefix + "es");
System.out.println("Il/Elle " + prefix + "e");
System.out.println("Nous " + prefix + "ons");
System.out.println("Vous " + prefix + "ez");
System.out.println("Ils/Elles " + prefix + "ent");
一切都在评论中解释
Scanner sc=new Scanner(System.in);
//asking for the verb
System.out.println("Donnez un verbe regulier du premier groupe :");
//putting the verb in the string
String chaine=sc.nextLine();
//taking the two last elements
char first=chaine.charAt(chaine.length());
char second=chaine.charAt(chaine.length()-1);
//creating a StringBuilder:
StringBuilder sb=new StringBuilder();
//putting string in the builder :
sb.append(chaine);
//deleting the two last characters :
sb.deleteCharAt(sb.length()-1);
//printing elemnts :
System.out.println("Je "+sb.append("e"));
System.out.println("Tu "+sb.append("es"));
System.out.println("Il/Elle "+sb.append("e"));
System.out.println("nous "+sb.append("ons"));
System.out.println("vous "+sb.append("ez"));
System.out.println("Ils/Elles "+sb.append("ent"));
我得到了StringIndexOutOfBoundsException
。
我可以根据你的问题提供更多帮助。
String radical = chaine.replaceFirst("..$", "");
System.out.println("Je " + radical + "e");
System.out.println("Tu " + radical + "es");
System.out.println("Il/Elle " + radical + "e");
System.out.println("Nous " + radical + "ons");
System.out.println("Vous " + radical + "ez");
System.out.println("Ils/Elles " + radical + "ent");
这使用正则表达式 replaceFirst
。模式:
.
任意字符.
任意字符$
字符串结尾
因此:最后两个字母被空字符串替换。
相对于 chaine.substring(0, chaine.length() - 2)
的小优势
是对于空字符串或单字母字符串没有发生索引错误;
它没有替代。诚然 substring
更快。
您的代码充满了错误。 第一:
char first=chaine.charAt(chaine.length());
char second=chaine.charAt(chaine.length()-1);
会抛出异常,因为chaine
的最后一个字符是chaine.length()-1
。所以你应该写:
char first=chaine.charAt(chaine.length()-1);
char second=chaine.charAt(chaine.length()-2);
或者也许:
char first=chaine.charAt(chaine.length()-2);
char second=chaine.charAt(chaine.length()-1);
但你似乎没有对 first
和 second
做任何事情。
接下来,StringBuilder.append
会将参数附加到构建器,我认为这不是您不会做的。
也许你想做:
String prefix = chaine.substring(0, chaine.length()-2);
System.out.println("Je " + prefix + "e");
System.out.println("Tu " + prefix + "es");
System.out.println("Il/Elle " + prefix + "e");
System.out.println("Nous " + prefix + "ons");
System.out.println("Vous " + prefix + "ez");
System.out.println("Ils/Elles " + prefix + "ent");