我有一个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();
}
答案 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
会更合适。