我编写了一个西班牙语共轭者。例如,如果单击方法isItEr()
,则输入单词,然后在交换机采样器中输入与表单关联的字母。
错误在'case a:'的行上 java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:97(在java.lang.string中)
public void isItIr()
{
System.out.print("Enter the infinitive: ");
Scanner keyIn = new Scanner(System.in);
String infinitive = keyIn.nextLine().toLowerCase();
if(infinitive.substring(infinitive.length()-2, infinitive.length()).equals("ir"))
word = conjugateEndingIr(infinitive);
}
private String conjugateEndingIr(String infinitive)
{
Scanner keyIn = new Scanner(System.in);
System.out.println("Choose form: ");
System.out.println("a. Yo");
System.out.println("b. Tu");
System.out.println("c. El/Ella/Usted");
System.out.println("d. Nosotros");
System.out.println("e. Ellos/Ellas/Ustedes");
System.out.println("f. Exit program");
System.out.print("Enter Choice => ");
String input = keyIn.nextLine().toLowerCase();
char ch = input.charAt(0);
if (!(ch >= 'a' && ch <='e'))
{
System.out.println("Invalid Choice!!!");
System.out.print("Please enter choice again => ");
input = keyIn.nextLine().toLowerCase();
ch = input.charAt(0);
}
switch( ch)
{
case 'a':
char idxio = 'a';
word = infinitive.substring(0, idxio) + "o";
return word;
case 'b':
char idxesi = 'a';
word = infinitive.substring(0, idxesi) + "es";
return word;
case 'c':
char idxei = 'a';
word = infinitive.substring(0, idxei) + "e";
return word;
case 'd':
char idximos = 'a';
word = infinitive.substring(0, idximos) + "imos";
return word;
case 'e':
char idxeni = 'a';
word = infinitive.substring(0, idxeni) + "en";
return word;
case 'f':
System.out.println("Goodbye");
System.exit(-1);
break;
default:
System.out.println("Invalid menu choice");
System.out.println("Goodbye");
System.exit(-1);
}
return word;
}
`
当我输入beber时,它会使用“选择表单”加载开关采样器,当我输入'a'时,我会收到标题中声明的错误!我该如何解决这个问题?感谢〜
答案 0 :(得分:1)
这是因为'a'
是您的代码重新解释为其代码点的字符(恰好是97
)。
当你这样做时
char idxio = 'a';
word = infinitive.substring(0, idxio) + "o";
该字符串尝试获取一个短于97的单词中的前97个字符。
你可能想要的是从目标词的末尾开始找到字母'a'
的索引,砍掉结尾,然后用'o'
替换它。您可以使用lastIndexOf('a')
:
int idxio = infinitive.lastIndexOf('a');
word = infinitive.substring(0, idxio) + "o";
答案 1 :(得分:0)
请勿使用String.substring
。如果您查看String
类的Javadoc,您将看到boolean endsWith(String suffix)
方法。使用最自然和特定的方法。
您可能还想使用正则表达式(.*)ir$
;如果匹配,则捕获的组是基础。在西班牙语中,您是否可以从单词本身确定共轭的形式,而不是让用户进行干预?