删除 Java 中的重复字符串

Get rid of duplicate Strings in Java

我有一个字符串数组:

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);

        }

}

我该如何解决这个问题?

正确的输出应该是打印一行。

更新:

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

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();
}

在您的 if 语句中添加 break 以阻止您的 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
          }
    }

}

可以在System.out.println(text);后添加break语句退出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 会更合适。

根据问题更改编辑答案

遍历 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;
            }
        }
    }
}