java - 关于单词搜索算法的问题

标签 java arrays string char

我的代码似乎抛出此错误: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 - 1j + 1将超出字符串的范围。

关于java - 关于单词搜索算法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58051811/

相关文章:

java - 不支持的类版本错误 : org/apache/maven/plugin/compiler/TestCompilerMojo

python - 如何根据设置值创建均匀分布的 Numpy 数组

c - 在c中的字符串左侧添加空格

c++ - 在 C++ 中将 char 连接到字符串时会发生什么?

java - Spring ConflictingBeanDefinitionException 与现有的、不兼容的同名和类的 bean 定义冲突

java - Hbase 区域服务器关闭

mysql - 在 Java 中执行多个 COUNT 查询

c - 如何计算C中每行输入的单词数

java - BeanCreationException : Error creating bean with name 'springApplicationAdminRegistrar' . InstanceAlreadyExistsException

javascript - 如何检测数组是否具有年份值并定义它?