2017-01-26 10 views
0

Я ударил стену!Сканер next() - как заменить разрывы строк [java]

После прочтения много интересных потоков на StackOverflow, я пробовал много разных решений, но ничего не работает.

Предположим, у меня есть .txt-файл, где я хочу заменить разрывы строк на «XXX». Я использую метод count для подсчета строк в документе.

Scanner reader = new Scanner("document.txt); 

String [] textToArray = new String[count]; 

for(int i = 0; textToArray.length; i++){ 
String text = reader.nextLine(); 

text = text.replaceAll("\n", "XXX"); 
textToArray[i] = text; 

} 

Затем я использую для каждого цикла, чтобы распечатать текст. Выход по-прежнему совпадает с исходным.

Я также пробовал «\ n», «\ r», «\ r» даже «\ r \ n».

+4

Это потому, что вы читаете его по строкам, не читая символ новой строки. –

+0

Ах, это имеет смысл! Есть ли способ обойти это? Может быть, другой подход? – denUdvalgte

+1

Чтобы придумать другой подход, укажите, что вы хотите сделать;) Вы хотите, чтобы эти строки были в массиве или в одной строке? –

ответ

0
String text = reader.nextLine(); 

text = text.replaceAll("\n", "XXX"); 

Когда вы читаете строку, не будет разрыва строки для замены всех на триггер. У вас будет какая-то строка, которую вы читали в этот момент в тексте.

Попробуйте построить строку или поместить полный текст в строку, а затем заменить новые строки.

1

Прочитайте документацию, то есть Javadoc из nextLine():

Авансы этого сканера мимо текущей строки и возвращает вклад, который был пропущен. Этот метод возвращает остальную часть текущей строки, , за исключением любого разделителя строк в конце. Позиция устанавливается в начало следующей строки.

Итак, вы читаете текст каждой строки, но вы не увидите \r и/или \n символов.

Поскольку вы читаете каждую строку в массив, вы должны просто добавить XXX к каждому значению:

for (int i = 0; textToArray.length; i++) { 
    String text = reader.nextLine(); 
    textToArray[i] = text + "XXX"; 
} 

Unrelated

Я хотел бы также предположить, что вы читали в List, вместо массива. После этого вы всегда можете преобразовать в массив.

И я надеюсь, что вы помните, чтобы закрыть Scanner, и что вы показали макет кода, потому что new Scanner("document.txt") будет сканировать текст document.txt, а не содержимое файла с таким именем.

String[] textToArray; 
try (Scanner reader = new Scanner(new File("document.txt"))) { 
    List<String> textList = new ArrayList<>(); 
    for (String text; (text = reader.nextLine()) != null;) { 
     textList.add(text + "XXX"); 
    } 
    textToArray = textList.toArray(new String[textList.size()]); 
} 
+0

Спасибо вам большое за решение! Я очень возбужден и забыл ответить! Я пробовал это решение, но, прочитав это, он сделал гораздо больше смысла. – denUdvalgte

0

Если я понимаю ваш вопрос, вы хотите заменить «\ n» на XXX в приведенном примере? Было бы musch легче читать весь файл в одну строку следующим образом:

String file = new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8); 

, а затем вы можете использовать встроенную функцию, такие как:

String replace(char oldChar, char newChar); 

Это возвращает новую строку, содержащую ваш файл, причем все пробелы заменены на XXX. Или любой другой персонаж, который вы хотите использовать.