gpt4 book ai didi

java - Boyer-moore 计算单词 java

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:20:37 24 4
gpt4 key购买 nike

我在 java 中有一个作业,我必须使用 Sedgewick 的 Boyer Moore 子串搜索解决方案:http://algs4.cs.princeton.edu/53substring/BoyerMoore.java.html

现在它将在找到单词的第一次出现时停止并返回找到它的位置。所以为了计算单词我将搜索方法更改为:

public String search(String txt) {
int M = pat.length();
int N = txt.length();
int count = 0;
int skip = 0;
int charCount = 0;
for (int i = 0; i <= N - M; i += skip) {
skip = 0;
for (int j = M-1; j >= 0; j--) {
if (pat.charAt(j) != txt.charAt(i+j)) {
skip = Math.max(1, j - right[txt.charAt(i+j)]);
break;
}
charCount++;
}
if (skip == 0)
{
count++;
skip++;
}
}
return "Aantal char: " + charCount + "\n" + count;
}

我更改了 if skip 语句以运行计数器“count”并在最后返回它。发生的情况是,如果我手动给它输入一个模式和一些文本,它似乎就可以了,所以:

模式:测试文本:“此测试是测试测试测试测试”结果:5

但是我需要读取一个包含大约 70k 单词的文本的 txt 文件并进行子字符串搜索:

        BufferedReader input = new BufferedReader(new FileReader(System.getProperty("user.home") + "/Desktop/opdr3tekst.txt"));
StringBuilder stringBuilder = new StringBuilder();

while(input.readLine() != null)
{
stringBuilder.append(input.readLine());
}
input.close();

BoyerMoore boyer = new BoyerMoore("pattern to search");


System.out.println(boyer.search(stringBuilder.toString()));

所以当我搜索一个词时,我得到的数字总是比我在 mac 文本编辑器中 CMD+F 文件本身时少很多。知道出了什么问题吗?

最佳答案

您在读取文件时跳过了文件中的行。这是因为这个 while(input.readLine() != null)。执行此语句时读取的行永远不会添加到 StringBuilder

要解决这个问题,您可以这样做:

for(String line;(line = input.readLine())!=null;){
stringBuilder.append(line);
}

关于java - Boyer-moore 计算单词 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com