【问题标题】:Compare string array values in Java比较Java中的字符串数组值
【发布时间】:2017-02-01 14:58:39
【问题描述】:

我正在尝试将字符串数组中的每个值与同一数组的所有值进行比较,以查看它们是否相等(例如“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(例如),它将始终为真,忽略该空间内的字符串。所以我得到了文本中所有单词的输出。

【问题讨论】:

  • 将您的代码发布为文本,而不是图像
  • 不要将文本/代码作为图片/链接发布 (more info)
  • replaceAll 调用的目的是什么?
  • 第二个循环不应该是for (int B = text.length -1; B &gt; A; B--吗?和

标签: java arrays string compare equals


【解决方案1】:

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

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

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

【讨论】:

  • 您的第二个循环正在进行不必要的比较。你的循环应该是for (int b = a+1; b &lt; text.length; b++)
  • Janar 我会删除第一个示例,因为这不起作用,因为您想查找重复项,并且您的第一个示例将始终将一个值与自身进行比较,从而打印列表中的每个元素。只留下第二个。
【解决方案2】:

看起来嵌套循环应该是 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]);
    }
  }
}

【讨论】:

  • 这行得通,非常感谢!我在写这篇文章时犯了一些错误,因为我简化了代码以使其更容易理解。
  • 啊,我明白了。很高兴我能帮上忙!
猜你喜欢
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2020-04-24
  • 2012-02-14
  • 2011-08-02
  • 1970-01-01
相关资源
最近更新 更多