Я хочу разделить файл на картинке, и я не могу из-за строк ... Я получаю все вместе. Какую команду в регулярном выражении нужно разделить, даже если есть новая строка?
Это должно делать:
protasi[] = string.split("\\r?\\n");
split("\n")
не будет работать, потому что вам нужно предоставить обратную косую черту для \n
, которая становится \\n
. Я также добавил \\r
, который мы должны использовать для перевода строки / возврата каретки.
Когда String задана как переменная, она работает, но если я читаю ее из текстового файла, это не так.
Пожалуйста, объясните, почему это решение должно быть действительным в ответе. Это поможет OP понять свою ошибку и больше не повторять ее.
PS: проверьте Экранированные символы регулярного выражения Java.
Аксель, твой ответ был полезен. вот что я сделал! Благодарность
Вы читаете файл, используя Scanner
, чтобы получить каждую строку.
while(sc.hasNextLine())
Вы добавляете StringBuffer
к каждой строке (без разделителей).
sb.append(sc.nextLine())
Итак, в этот момент файл с:
foo
bar
Отдал бы StringBuffer
с
sb.toString(); //foobar
Так что разделителя строк не осталось ... Вместо этого сделайте это с Scanner
.
while(sc.hasNextLine()){
String s = sc.nextLine();
System.out.println(s):
sb.append(s);
}
И последнее: закройте все Scanner
, которые вы открываете с помощью sc.close()
, когда закончите с ними (это хорошая практика).
Обновлено:
Если вы хотите сохранить эту логику, просто добавьте разделитель строк после каждой строки:
while(sc.hasNextLine()){
sb.append(sc.nextLine()).append("\n");
}
Таким образом, у вас всегда будет разделитель строк, и разделение будет работать
Быстрый пример того, как это будет выглядеть:
StringBuffer sb = new StringBuffer();
sb.append("foo").append("\n")
.append("bar").append("\n"); //fake "file reading"
String[] result = sb.toString().split("\n");
for(String s : result){
System.out.println(s);
}
foo
bar
Пожалуйста, разместите код и содержимое файла в виде текста, а не изображения. редактировать вопрос соответственно. См. Не рекомендуется делать скриншоты кода и / или ошибок