Код программы считывает информацию из файла и переводит его в строку:
public static void main(String[] args) throws FileNotFoundException, IOException {
Reader reader = new FileReader(args[0]);
String buf = "";
while (reader.ready())
{
int data = reader.read();
buf = buf + (char)data;
}
buf = buf.replace('\n', ' ');
Проблема в последней строке. Без нее переменная buf отображает текст файла адекватно.
Текст файла:
Petrov 2.7
Sidorov 3.15
Petrov 5
Varez 3.1
Kirk 9
Переменная buf без метода replace выводит в консоль:
Petrov 2.7
Sidorov 3.15
Petrov 5
Varez 3.1
Kirk 9
Если я добавляю replace, то вместо замены символа '\n' (переход на другую строку) на ' ' (пробел) и итогового текста в одну строку я получаю только последний элемент с символом ' ' перед ним.
Вывод в консоль после buf = buf.replace('\n', ' '):
Kirk 9
В чем нарушена логика выполнения и как ее можно исправить, чтобы текст выводился в виде
Petrov 2.7 Sidorov 3.15 Petrov 5 Varez 3.1 Kirk 9
Использовать по условию могу только FileReader.
Проблема в том, что в файле у вас не просто \n, а \r\n. Поэтому при замене только \n все \r остаются на месте, что приводит к выводу символов после \r с начала строки с затиранием уже выведенных символов.
То есть в buf по-прежнему хранятся все строки (в этом можно убедиться с помощью System.out.println(buf.length())), однако выводится buf некорректно (относительно того как нужно вам).
В данном случае достаточно сделать так:
buf = buf.replace("\r\n", " ");
А ещё я бы переписал код с закрытием Reader-а после чтения, обработкой исключений в самом коде, блочным чтением данных и использованием StringBuilder вместо конкатенации строк:
public static void main(String[] args)
{
String fileName = args[0];
try (FileReader reader = new FileReader(fileName))
{
char[] buffer = new char[1024];
StringBuilder sb = new StringBuilder();
int readCount;
while ((readCount = reader.read(buffer)) != -1)
{
sb.append(buffer, 0, readCount);
}
String result = sb.toString().replace("\r\n", " ");
System.out.println(result);
}
catch (IOException e)
{
e.printStackTrace();
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей