删除 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;
}
}
}
}
我有一个字符串数组:
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;
}
}
}
}