我制作了一个简单的程序来拼写单词。该程序有2个输入,一个String数组作为字典,String作为一个句子。程序检查句子(单词到单词)并检查字典以找到一个单词,然后询问用户是否打算在单词中写下单词。
要求: 前2个字符必须相同。 字典中的单词只能比句子单词多2个字符。 字典中的单词只能有2个不同的字符而不是句子中的单词。 (唯一计算的字符是索引在0和句子长度之间的字符。例如efg和egg | s)
public static String SpellCheck(String[] dictionary, String sentence){
Scanner sc = new Scanner(System.in);
String newSentence = "";
StringTokenizer divisor = new StringTokenizer(sentence);
while(divisor.hasMoreElements()){
String word = divisor.nextToken();
String a = "";
for(int i = 0; i<dictionary.length; ++i){
int n = 0;
if(word.length()>2 && dictionary[i].length()-word.length()<=2 && word.substring(0,2).indexOf(dictionary[i].substring(0,2))==0){
String s1 = word.substring(2,word.length());
String s2 = dictionary[i].substring(2,dictionary[i].length());
for(int k = 0; k<s1.length(); ++k){
String l1 = s1.substring(k,k+1);
String l2 = s2.substring(k,k+1);
if(l1.indexOf(l2)!=0)++n;
}
if(n<=2){
System.out.print(dictionary[i] + "?");
a = sc.nextLine();
if("yes".indexOf(a)==0){
newSentence += dictionary[i] + " ";
break;
}
}
}
}
if("yes".indexOf(a)!=0)newSentence += word + " ";
}
return newSentence;
}
问题在于
行String s2 = dictionary[i].substring(2,dictionary[i].length());
它适用于句子中的第一个单词,但在第二次我收到错误说&#34;字符串索引超出范围&#34;我无法弄清楚为什么我会使用.length()来查找最后一个字母的索引。我希望有人可以帮我弄清楚这个程序有什么问题。谢谢!
答案 0 :(得分:1)
我相信您的错误位于您已经说错误
的下方的for循环中String s2 = dictionary[i].substring(2,dictionary[i].length());
for(int k = 0; k<s1.length(); ++k){ //HERE
String l1 = s1.substring(k,k+1);
String l2 = s2.substring(k,k+1);
}
设置l1和l2时,将超出字符串索引的范围。 for循环应该读
for(int k = 0; k < s1.length()-1; ++k){
答案 1 :(得分:0)
如果长度小于2怎么办?你的起始指数是2。