Вот для этого кода:
public class Main {
public static void main(String[] args) throws IOException {
String fileName1 = null;
ArrayList<String> listFile1 = new ArrayList<>();
StringBuilder sb = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
fileName1 = reader.readLine();
}
try (FileReader fileReader = new FileReader(fileName1)) {
while (fileReader.ready()) {
sb.append((char) fileReader.read());
}
String string = sb.toString();
String[] strings = string.split("\\n");
for (int i = 0; i < strings.length; i++) {
System.out.println(strings[i]);
listFile1.add(strings[i]);
System.out.println(listFile1);
}
}
}
}
Использую txt файл вот с таким содержанием:
строка1
строка2
строка3
строка4
строка5
строка1
строка2
строка3
строка5
строка0
!!! Но в список ArrayList добавляется скобка "]" и ", строка0]". Не могу понять в чём проблема, если выводить содержимое массива strings, то всё красиво - каждая строка это новые элемент массива. А вот при добавлении этих данных в список что-то происходит. Подскажите пожалуйста в чём причина?
Anton
22 уровень
При добавлении данных в ArrayList типа String добавляется "["
Решен
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
KIRAРазработчик в prosv.ruExpert
15 августа 2022, 09:54
Потому что так определен toString()
Тут к примеру вы выводите значение ячейки массива
0
Ant
15 августа 2022, 10:05
тогда почему это работает по другому?
0
KIRAРазработчик в prosv.ruExpert
15 августа 2022, 10:12
Что значит по другому, тут тоже самое. Скобки добавляются потому что выводится весь список, а за его вывод отвечает метод toString(). Вы выводите весь список каждый проход цикла
0
Ant
15 августа 2022, 10:27
ну я тоже думал что вывод нужно через listFile1.get(i).
Но если запустить код то будет
0
KIRAРазработчик в prosv.ruExpert
15 августа 2022, 10:51решение
Вывод такой потому что регулярное выражение не правильное.
У вас в строке есть еще \r возврат каретки, из за этого вывод затирается и получается странным
+4
Ant
15 августа 2022, 10:55
Спасибо, голову уже сломал, что не так)
0
Anton
15 августа 2022, 10:55
Именно. В моём случае в списке находится каждый раз скобка "]" хотя должны каждый раз добавляться элементы [строка1, строка2, ...]
0
Anton
15 августа 2022, 11:00
где тоже самое? В моём коде в список выводится скобка:
строка1
]
строка2
]
строка3
]
строка4
]
строка5
, строка5]
А во втором примере выводится всё как надо:
строка1
[строка1]
строка2
[строка1, строка2]
Мне кажется сбой происходит где-то на этапе помещения данных в массив strings из txt файла и потом этот тип данных не совмещается с arraylist listFile1. Но не могу понять в чём именно затыка.
0
Anton
15 августа 2022, 11:02
toString нормально выводит список. Скобка "]" в списке получается даже если через .get(i) выводить.
0
Ant
15 августа 2022, 11:09
я так понимаю у вас Windows, а значит для перехода на новую строку используются символы \r\n, сответвенно в файле пишете
а по существу там
выходит регулярка убирает из списка \n, оставляя символ каретки, а она в свою очередь сдвигает видимую часть влево, выходит мы видим из всего отображения только конец в виде ]
0
Anton
15 августа 2022, 11:31
KIRA спасибо! Но всё равно не могу понять в моём случае сплита в массив strings красиво заходило и выводилось а в список listFile1 не заходило... То есть arraylist видит этот знак каретки и не может дабавить к себе этот элемент?
0
Ant
15 августа 2022, 12:44
символ каретки в обоих случаях есть, в первом случае выводится конкретно строка, через println, добавляющий перенос строки. Попробуй через print, увидишь результат.
во втором случае выводится содержание массива в скобках [ ], но из за символа каретки происходит сдвиг влево всей отображаемой части массива, за исключение ].
можешь проверить длину строки, в ней будет на один символ больше, чем записано в файл.
извини, что влез)
0
KIRAРазработчик в prosv.ruExpert
15 августа 2022, 12:52
Он действует точно так же как и массив, разница в том как вы выводите (об этом я писал в 1вом комментарии).
В вашем массив strings:
строка1\r
строка2\r
...
Когда вы выводите в консоль это не вызывает проблем
В listFile1:
строка1\r
строка2\r
...
Вы используете вывод всего списка, а это добавляет скобки
[строка1
возврат каретки и все затерли ]
в итоге получился вывод:
]
в последней строке нет \r\n, по этому выводится строка0]
Воспользуйтесь дебагом, поставьте точку на выводе и посмотрите значения массива и списка, посмотрите как будет формироваться строка для вывода
+1