在Java中为HashSet构建字符串 - 无法通过大字符串正确循环

时间:2012-10-29 06:50:50

标签: java stringbuilder hashset

我试图从包含许多单词的一个很长的字符串中提取单词作为字符串。我正在尝试使用这个字符串的大块,使用for循环遍历它,构建字符串,将它们添加到hashset,并跟踪我在这个过程中有多少单词。当我完成所有内容并且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文档。

2 个答案:

答案 0 :(得分:1)

第一个条件适用于所有字符

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

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

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

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

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

您需要在需要时打开/关闭'isWord'标志来更改条件。

答案 1 :(得分:0)

尝试这种方法......

- 使用BreakIterator中的java.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