繁体   English   中英

比较 Java 中的字符串数组值

[英]Compare string array values in 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(例如),它将始终为真,忽略此空间内的字符串。 所以我将文本中的所有单词作为输出。

第二个 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]);
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM