我正在尝试将字符串数组中的每个值与同一数组的所有值进行比较,以查看它们是否相等(例如"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]);
}
}
}