摆脱Java中的重复字符串

时间:2015-03-03 14:52:44

标签: java filter

我有一个String数组:

String[] array = {"the","juice"};

和另一个带有一些文字的字符串:

String text = "the juice we had yesterday was great!";

和一个函数,它基本上检查数组中的单词是否存在于文本中,如果是这种情况则打印字符串。

这非常简单,但是我在输出上得到重复的行,因为for循环一次检查一个单词。由于两者都存在于字符串中,因此文本将被打印两次。

这是我的代码,用于说明目的:

public void filter (String[] words, String text){

    for(int i = 0; i < words.length; i++){

          if(text.toLowerCase().contains(words[i].toLowerCase()))

              System.out.println(text);

        }

}

我该如何解决这个问题?

正确的输出将是该行的JUST ONE打印。

更新:

考虑读取的文本文件而不仅仅是字符串:

public void filter (String[] words, BufferedReader text){

    String line = text.readLine();

    for(int i = 0; i < words.length; i++){

          if(line.toLowerCase().contains(words[i].toLowerCase()))

              System.out.println(text);

        }
    line = text.readLine();
}

3 个答案:

答案 0 :(得分:2)

根据问题更改编辑答案

遍历reader

中的每一行

循环words数组以查找any匹配

如果匹配则打印文本

转到reader

中的下一行
public void filter(String[] words, BufferedReader reader) throws IOException {

    String text;
    while ((text = reader.readLine()) != null) {
        for (int i = 0; i < words.length; i++) {
            if (text.toLowerCase().contains(words[i].toLowerCase())) {
                //Anytime I'm able to find something ono the array print it out
                System.out.println(text);
                //move on to the next line in the reader
                break;
            }
        }
    }
}

答案 1 :(得分:1)

break语句中添加if,以阻止for循环继续进行。

public void filter (String[] words, String text){

    for(int i = 0; i < words.length; i++){

          if(text.toLowerCase().contains(words[i].toLowerCase())){
              System.out.println(text);
              break; //this will stop processing your for loop
          }
    }

}

答案 2 :(得分:1)

您可以在break之后添加System.out.println(text);语句以退出for循环。但是,您需要使用大括号,否则您将在第一次迭代后从for循环中断。

public void filter (String[] words, String text) {
    for (int i = 0; i < words.length; i++) {
        if(text.toLowerCase().contains(words[i].toLowerCase())) {
            System.out.println(text);
            break;
        }
    }
}

在您的情况下,我建议您不要使用for循环,do/while或简单while会更合适。