Добрый день, программа выводит верный результат когда используются латинские буквы с тестовом файле. Как только копирую в файл пример из условия "рот тор торт..." выдаёт какие-то кракозябры и пары не подбирает. Кодировка файл UTF-8 (пробовал и UTF-8 без BOM, та же ситуация). Ну и соответственно валидатор не принимает по последнему условию. В чём может быть проблема и связана ли она с проблемой чтения кириллицы?
Вот скрин того как читается текст кириллицей из тестового файла
package com.javarush.task.task22.task2207;
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
/*
Обращенные слова
*/
public class Solution {
public static List<Pair> result = new LinkedList<>();
public static void main(String[] args) throws IOException {
//вводим имя и расположение файла
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String path = reader.readLine();
//считываем символы из файла в изменяеую строку
FileInputStream stream = new FileInputStream(path);
StringBuilder stringBuilder = new StringBuilder("");
while (stream.available() > 0) {
char c;
c = (char) stream.read();
stringBuilder.append(c);
}
System.out.println();
System.out.println("строка из файла - " + stringBuilder);
System.out.println();
String s = stringBuilder.toString();
String s2 = s.replaceAll("\n", " ");
String s3 = s2.replaceAll("\r", "");
System.out.println("строка из файла без '|n' - " + s3);
//разбиваем строку на массив
String[] arrStr = s3.split(" ");
System.out.print("массив - ");
for (int i = 0; i < arrStr.length; i++) {
System.out.print(arrStr[i] + ", ");
}
System.out.println();
//сравниваем элементы массива и добавляем пары в список
for (int i = 0; i < arrStr.length; i++) {
StringBuilder stringBuilderI = new StringBuilder(arrStr[i]);
System.out.println("stringBuilderI = " + stringBuilderI);
String s1 = stringBuilderI.reverse().toString();
System.out.println("s1 = " + s1);
for (int j = i + 1; j < arrStr.length; j++) {
System.out.println("arrStr[j] - " + arrStr[j]);
if (s1.equals(arrStr[j])) {
result.add(new Pair(arrStr[i], arrStr[j]));
System.out.println("да, одинаковые");
System.out.println("Н О В А Я П А Р А - " + new Pair(arrStr[i], arrStr[j]));
} else {
System.out.println(stringBuilderI + " и " + arrStr[j] + " не совпадают");
}
}
System.out.println("------------------ проработали i = " + i);
}
System.out.println();
System.out.println();
System.out.println();
System.out.println("result до чистки" + result);
//удаляем дубликаты из списка
for (int i = 0; i < result.size() - 1; i++) {
System.out.println(String.format("result.get(%d) = ", i) + result.get(i) +
String.format("....result.get(%d) = ", i + 1) + result.get(i+1));
if (result.get(i).equals(result.get(i + 1))) {
result.remove(result.get(i));
i--;
System.out.println(String.format("----------удалили result.get(%d)", i));
}
}
System.out.println(result);
stream.close();
}
public static class Pair {
String first;
String second;
public Pair() {
}
public Pair(String first, String second) {
this.first = first;
this.second = second;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pair pair = (Pair) o;
if (first != null ? !first.equals(pair.first) : pair.first != null) return false;
return second != null ? second.equals(pair.second) : pair.second == null;
}
@Override
public int hashCode() {
int result = first != null ? first.hashCode() : 0;
result = 31 * result + (second != null ? second.hashCode() : 0);
return result;
}
@Override
public String toString() {
return first == null && second == null ? "" :
first == null && second != null ? second :
second == null && first != null ? first :
first.compareTo(second) < 0 ? first + " " + second : second + " " + first;
}
}
}