Java 尝试使用子字符串时索引超出范围

Java 尝试使用子字符串时索引超出范围,java,Java,我制作了一个简单的拼写检查程序。该程序有两个输入,一个字符串数组用作字典,另一个字符串作为句子。程序检查句子(逐字逐句)并检查字典以找到一个相似的单词,然后询问用户是否打算在字典中写入该单词 要求: 前两个字符必须相同。 词典中的单词只能比句子中的单词多2个字符。 词典中的单词只能与句子中的单词有两个不同的字符。(唯一可计算的字符是索引介于0和句子单词长度之间的字符,例如efg和egg | s) 它适用于句子中的第一个单词,但在第二次出现错误时,我会说“字符串索引超出范围”,我无法理解原因,因为

我制作了一个简单的拼写检查程序。该程序有两个输入,一个字符串数组用作字典,另一个字符串作为句子。程序检查句子(逐字逐句)并检查字典以找到一个相似的单词,然后询问用户是否打算在字典中写入该单词

要求:
前两个字符必须相同。 词典中的单词只能比句子中的单词多2个字符。 词典中的单词只能与句子中的单词有两个不同的字符。(唯一可计算的字符是索引介于0和句子单词长度之间的字符,例如efg和egg | s)


它适用于句子中的第一个单词,但在第二次出现错误时,我会说“字符串索引超出范围”,我无法理解原因,因为我正在使用.length()查找最后一个字母的索引。我希望有人能帮我找出这个程序的毛病。谢谢大家!

如果长度小于2怎么办?您的起始索引是2。

我相信您的错误在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);
}
String s2=dictionary[i].子字符串(2,dictionary[i].length());

对于(int k=0;k这是真的,但不是问题,我正在检查的单词有8个字母。无论如何,谢谢你的建议,我也要改变它!@mike问题不在于你正在检查的单词;如果字典中的单词只有一个字符长呢?那么你正在做
。substring(2,1)
。顺便说一句,StringTokenizer是一个遗留类。您应该改用String.split()。为什么要使用
子字符串(2
前两个字符是什么?或者您是否正在尝试查找其他具有相同前两个起始字符的单词?前两个字符必须相同,这是要求之一。您使用的是什么输入/字典?似乎正在为我所做的一个小测试工作。因此,调试它,您将看到原因:
System.out.println(字典[i].length());
String s2 = dictionary[i].substring(2,dictionary[i].length());
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);
}
for(int k = 0; k < s1.length()-1; ++k){