Друзья мои, есть следущий код, имеются два одинаковых слова (String), я взял слово "файл" из List words и просто методом Ctrl + c, Ctrl + v скопировал его в файл. В итоге, при выводе в консоль на первой инерации цикла 1, в консоль выводятся две одинаковые строки, но у них совершенно разный размер и соответсвенно, при сравнении этих строк, equals() выдает false, если я возьму и перенесу слово файл на вторую позицию проверяемой строки, то на второй итерации все будет хорошо и equals выдаст true! Также при проверке строки "файл вид Антон Горшок Уаз" a[0].equals("файл") = false, а c.get(0).equals("файл") = true. Вопрос что не так с a[0] ? Частичный результат работы программы представлен ниже!
Проверяемая строка : "вид файл Антон Горшок Уаз"
Вывод для первой и второй итерации цикла 1.
вид = файл a[i].equals(c) = false i = 0 a[i].length() = 4 c.length() = 4 // начало первой итерации
вид = вид a[i].equals(c) = false i = 0 a[i].length() = 4 c.length() = 3
вид = В a[i].equals(c) = false i = 0 a[i].length() = 4 c.length() = 1
файл = файл a[i].equals(c) = true i = 1 a[i].length() = 4 c.length() = 4 // начало второй итерации
файл = вид a[i].equals(c) = false i = 1 a[i].length() = 4 c.length() = 3
файл = В a[i].equals(c) = false i = 1 a[i].length() = 4 c.length() = 1
Проверяемая строка : "файл вид Антон Горшок Уаз"
Вывод для первой и второй итерации цикла 1.
файл = файл a[i].equals(c) = false i = 0 a[i].length() = 5 c.length() = 4 // начало первой итерации
файл = вид a[i].equals(c) = false i = 0 a[i].length() = 5 c.length() = 3
файл = В a[i].equals(c) = false i = 0 a[i].length() = 5 c.length() = 1
вид = файл a[i].equals(c) = false i = 1 a[i].length() = 3 c.length() = 4 // начало второй итерации
вид = вид a[i].equals(c) = true i = 1 a[i].length() = 3 c.length() = 3
вид = В a[i].equals(c) = false i = 1 a[i].length() = 3 c.length() = 1
package com.javarush.task.task19.task1922;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/*
Ищем нужные строки
*/
public class Solution {
public static List<String> words = new ArrayList<String>();
static {
words.add("файл");
words.add("вид");
words.add("В");
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedReader file = new BufferedReader(new FileReader("D:\\1.txt"));
while (file.ready()) {
String[] a = file.readLine().split(" ");
int s = 0;
for (int i = 0; i<a.length; i++) { // цикл 1
for (String c : words) { // цикл 2
System.out.println(a[i] +" = " + c + " " + a[i].equals(c) + " " + i + " " + a[i].length() + " " + c.length()); // строка проверки
if (a[i].equals(c)) {
s++;
}
}
}
}
}
}
P.S. сори за большой текст, хотелось подробно изложить проблему, так как googling не помог, да и проблема какая-то совсем странная. Либо я в упор не вижу глупой ошибки, либо чего-то не знаю о работе String.split().