我试图将字符串数组中的每个值与同一数组的所有值进行比较以查看它们是否相等(例如" wordA"等于" wordA&#34 )。 这就是我所拥有的:
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(例如),它将永远为真,忽略此空间内的字符串。所以我将文本中的所有单词作为输出。
答案 0 :(得分:2)
第二个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]);
}
}
}
答案 1 :(得分:1)
看起来嵌套循环应该是B--而不是B ++。这不是一个永无止境的循环吗?无论哪种方式,我认为没有理由在每个循环中以相反的方向迭代。但是每个人都有自己的。
此外,应该进行某种比较以确保A!= B,否则您将比较数组中的相同值。 if (text[A].equals(text[B]))
会在某个时候比较if (text[0].equals(text[0]))
,if (text[1].equals(text[1]))
等
对于数组中的每个元素,这总是至少返回一次。
您需要添加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]);
}
}
}