Java程序,用于计算段落中的相似单词

Java程序,用于计算段落中的相似单词,java,Java,我试图计算从文件中读取的Java段落中出现类似单词的次数,但由于某些原因,该计数不起作用。你能告诉我如何修改这个方法使它能工作吗 void countsmwrd(String str) { int count = 0; String temp = ""; ArrayList<String> vx = new ArrayList<String>(); System.out.println("\nThe tokens are: ");

我试图计算从文件中读取的Java段落中出现类似单词的次数,但由于某些原因,该计数不起作用。你能告诉我如何修改这个方法使它能工作吗

void countsmwrd(String str) {
    int count = 0;
    String temp = "";
    ArrayList<String> vx = new ArrayList<String>();
    System.out.println("\nThe tokens are: ");
    StringTokenizer s = new StringTokenizer(str, " ,.", true);
    for (int i = 0; s.hasMoreTokens(); i++) {
        vx.add(s.nextToken());
    }

    for (int i = 0; i < vx.size(); i++) {
        String c = vx.get(i);

        for (int j = i; j < vx.size(); j++) {
            String k = vx.get(j);
            if (c == k && temp.indexOf(c) == -1) {
                count = count + 1;
            }

        }
        if (temp.indexOf(c) == -1) {
            temp = temp + c;
            System.out.println("Character   " + c + "   occurs   " + count + "    times");
        }

        count = 0;
    }
}

您的标记器正在基于…进行拆分,。。在你的典型段落中不会有很多这样的内容。将其更改为仅在空间上拆分。最好是空白\\s*的正则表达式,用于零个或多个空白。

您可以利用a来确定字数。我还建议通过调用str.toLowerCase来规范化输入字符串,以便和只计算一个单词。我还将为StringTokenizer中的returnDelims参数传递false,因为分隔符不应构成单词。以下是一个例子:

public int wordCount(String str) {
    StringTokenizer s = new StringTokenizer(str.toLowerCase(), " ,.", false);
    Set<String> uniqueWords = new HashSet<String>();
    while (s.hasMoreTokens()) {
        uniqueWords.add(s.nextToken());
    }
    return uniqueWords.size();
}

当你运行它时会发生什么?etc.空白处\\s的可能重复项。Java需要额外的反斜杠来告诉标记器它的意思是\s。