比较 Java 中的字符串数组值



我正在尝试将字符串数组中的每个值与同一数组的所有值进行比较,以查看它们是否相等(例如"wordA"等于"wordA")。这是我所拥有的:

FileReader input; 
input = new FileReader("file.txt"); 
BufferedReader reader = new BufferedReader(input); 
String line = reader.readLine(); 
String[] text = line.replaceAll("[^a-zA-Z ]", "").split("\s+"); 
for (int A = 0; A < text.length; A++) {
    for (int B = text.length; B > 0; B++){
        if (text[A].equals(text[B])){ 
        System.out.println("Repeated Word: "+text[A]);  
        }
    } 
} 

它只是比较数组空间,所以如果 A 和 B = 3(例如),它将始终为 true,忽略此空间内的字符串。所以我得到了文本中所有单词的输出。

第二个 for 循环有问题,你会得到一个数组索引越界。

相反,您也应该从头开始,如果索引相等,则排除

String[] text = { "a", "b", "c", "d", "a" };
for (int a = 0; a < text.length; a++) {
  for (int b = 0; b < text.length; b++) {
    if (text[a].equals(text[b]) && a != b) {
      System.out.println("Reapeated word : " + text[a]);
    }
  }
}

或者按照注释中的建议,从数组中的下一个元素开始(在这种情况下,您不必检查索引是否相等)

String[] text = { "a", "b", "c", "d", "a" };
for (int a = 0; a < text.length; a++) {
  for (int b = a + 1; b < text.length; b++) {
    if (text[a].equals(text[b])) {
      System.out.println("Reapeated word : " + text[a]);
    }
  }
}

看起来嵌套循环应该是 B-- 而不是 B++。这不是一个永无止境的循环吗?无论哪种方式,我认为没有理由在每个循环中以相反的方向迭代。但对每个人都有自己的。

此外,应该有某种比较以确保 A != B,否则您将比较数组中的相同值。 if (text[A].equals(text[B]))会在某个时候比较if (text[0].equals(text[0]))if (text[1].equals(text[1]))等。

对于数组中的每个元素,这将始终至少返回一次 true。

您需要添加if (A != B)比较才能修复它。

这样:

for (int A = 0; A < text.length; A++) {
  for (int B = 0; B < text.length; B++) {
    if (A != B && text[A].equals(text[B])) {
         System.out.println("Repeated word:" + text[A]);
    }
  }
}

相关内容

  • 没有找到相关文章