我的代码似乎抛出此错误:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 使用 substring 和 string.charAt() 方法
我尝试更改 for 循环和参数中的值,因此字符串索引不会超过其预期值
public final class WordSearcher {
public static void main(String args[]) {
//String wordLibrary = args[0];
//String puzzle = args[1];
int j,k,l;
String wordLibrary = "TEST,SAMPLE,OUTPUT";
String puzzle = "TUPTUOELPMAS";
String puzzleDup = puzzle;
String[] wordstoFind = wordLibrary.split(",");
int ifWordExists = 0;
int puzzleLength = puzzle.length();
for(k = 0; k< wordstoFind.length; k++) {
for (l = 0; l< wordstoFind[k].length(); l++) {
for(j=0; j< puzzleLength; j++) {
if(wordstoFind[k].charAt(l) == puzzleDup.charAt(j)) {
ifWordExists++;
puzzleDup = puzzleDup.substring(j+1,puzzleDup.length());
break;
}
}
}
if( ifWordExists == wordstoFind[k].length())
System.out.println(wordstoFind[k]);
ifWordExists = 0;
System.out.println(puzzle);
puzzleDup = puzzle;
}
for(k = 0; k< wordstoFind.length; k++) {
for (l = 0; l< wordstoFind[k].length(); l++) {
for(j=puzzleLength-1; j> 0; j--) {
if(wordstoFind[k].charAt(l) == puzzleDup.charAt(j)) {
ifWordExists++;
puzzleDup = puzzleDup.substring(0,j-1);
break;
}
}
}
if( ifWordExists == wordstoFind[k].length())
System.out.println(wordstoFind[k]);
ifWordExists = 0;
System.out.println(puzzle);
puzzleDup = puzzle;
}
}
}
它应该找到分散在作为命令行参数传递的字符串中的单词。例如,XTXXXEXXXXXSXT 应该返回 TEST,如果这是我必须找到的单词之一。
最佳答案
这里:
for(k = 0; k < wordstoFind.length; k++) {
for (l = 0; l < wordstoFind[k].length(); l++) {
for(j = 0; j < puzzleLength; j++) {
if(wordstoFind[k].charAt(l) == puzzleDup.charAt(j)) {
ifWordExists++;
puzzleDup = puzzleDup.substring(j + 1, puzzleDup.length());
^^^^^
break;
}
}
}
如果j
等于puzzleLength - 1
,j + 1
将超出字符串的范围。
关于java - 关于单词搜索算法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58051811/