0

我试图从一个包含许多单词的非常长的字符串中提取单词作为字符串。我正在尝试获取一个字符串的这个大块,用 for 循环遍历它,边走边构建字符串,将它们添加到哈希集中,并跟踪我在这个过程中有多少单词。当我构建完所有东西并且eclipse没有显示任何明显的错误时,我感到非常自豪,然后当我去测试它时,我有一个0计数器,0 hashset.size和一个空的hashset :(

这是我一直在捏造的代码:

    public int countUniqueWords(String line) {
    hashset = new HashSet<String>();
    word = new StringBuilder();
    int endOfLine = line.length() - 1;
    boolean isWord = false;
    String stringWord = null;
    Integer counter = 0;

    for (int i = 0; i < line.length(); i++) {
        if (Character.isLetter(line.charAt(i)) == true && i != endOfLine) {
            word.append(line.charAt(i));
        } else if (Character.isLetter(line.charAt(i)) == false && isWord == true) {
            counter++;
            stringWord = word.toString();
            hashset.add(stringWord);
            word = null;
            isWord = false;
        } else if (Character.isLetter(line.charAt(i)) && i == endOfLine) {
            counter++;
            stringWord = word.toString();
            hashset.add(stringWord);
        }
    }
    System.out.println(counter);
    System.out.println(hashset.size());
    System.out.println(hashset);
    return counter;
}

我将继续搜索并踢轮胎。与此同时,如果有人有任何建议,我会在我的小家庭办公室里给你很多精神上的良好氛围。似乎我在这里犯了至少一两个非常基本的错误,因为显然它甚至没有像预期的那样迭代循环。我怀疑这与我将 StringBuilder 与 HashSets 和 Character 类一起使用有关,所有这些都混合在一起,而对其中的任何一个都没有特别好的理解。是的,我已经倾注了 oracle 文档。

4

2 回答 2

1

第一个条件对所有字符都为真

   if (Character.isLetter(line.charAt(i)) == true && i != endOfLine)

第二个条件永远为假,因为 isWord 为假,条件下的语句永远不会执行

   else if (Character.isLetter(line.charAt(i)) == false && isWord == true) 

第三个条件永远不会执行,因为这与第一个条件相同

    else if (Character.isLetter(line.charAt(i)) && i == endOfLine)

您需要在需要时通过打开/关闭“isWord”标志来更改条件。

于 2012-10-29T09:28:43.250 回答
0

试试这个方法......

-使用BreakIteratorfromjava.text.BreakIterator及其static getWordInstance()方法来掌握句子中的所有单词。

-这将自动处理这个词或不的东西....

-然后只需将其添加到HashSet<String>

请参阅以下链接:

http://javabeanz.wordpress.com/2009/02/21/working-with-text-in-java-using-breakiterator-api/

http://download.java.net/jdk7/archive/b123/docs/api/java/text/BreakIterator.html

http://www.javadocexamples.com/java/text/BreakIterator/getWordInstance%28Locale%20where%29.html

于 2012-10-29T07:21:17.000 回答