при чтении строк из файла программа Java в некоторых случаях считывает одну строку в две разные строки

Мне нужно прочитать много текстовых файлов для разработки моего проекта. Каждый файл содержит твиты и ретвиты человека. Для этого я написал простой Java-код. Я также пытался читать файлы с помощью кода C. он также показывает те же проблемы. Программа может правильно читать некоторые строки, но в некоторых случаях она разбивает строки и читает одну строку в две разные строки. В некоторых местах программа также вводит новые строки.

Мне нужно прочитать файлы, как они есть. Не могли бы вы сообщить мне, это связано с вводом файлов или по какой-то другой причине. Есть ли решение? Благодарность

Ниже мой код, который очень прост.

public class Check {

public static void main(String[] args) throws FileNotFoundException, IOException {

   File InfileName = new File ("c:/users/syeda/desktop/12.txt");

   Scanner in = new Scanner(new FileReader(InfileName));

   String line="";
   int lineNo=0;

   while(in.hasNext()== true)
           {
                line = in.nextLine();
                System.out.println(line); 
                lineNo++;

            } 
    System.out.println(lineNo);

  }
}

Мой входной файл содержит всего 800 строк, но на выходе он показывает 819 строк. Дополнительные 19 строк — это пустые строки, которых нет во входных файлах, а некоторые строки из входного файла разбиты на две строки и показывают дополнительные 19 строк.


person syeda firdaus    schedule 25.05.2015    source источник
comment
Предоставление некоторого фрагмента кода было бы полезно.   -  person Kunjan Thadani    schedule 25.05.2015
comment
@kunjan, спасибо за совет. я добавил свой код   -  person syeda firdaus    schedule 26.05.2015
comment
не делайте этого while(in.hasNext()== true) правильный идиоматический способ while(in.hasNext())   -  person    schedule 26.05.2015


Ответы (1)


Ваши данные не то, что вы думаете:

В вашем файле несколько разделителей строк подряд. Вот откуда берутся пустые строки.

\n\n будет считаться пустой строкой, Windows, вероятно, \n\r\n\r.

Маркеры конца строки невидимы в таких вещах, как TextPad, у вас есть \n или \n\r, где вы не думаете, что они есть, это так просто.

Мусор на входе, мусор на выходе

Код правильный, данные неверны.

Также Scanner - неправильный выбор, BufferedReader было бы лучшим решением.

person Community    schedule 26.05.2015
comment
Спасибо за ваш ответ. Я также пробовал с BufferedReader. Он показывает тот же результат. При чтении программа разбивает некоторые строки на две строки. Часть моего кода с буферизованным считывателем: while((line=reader.readLine()) != null) { System.out.println(line); строка№++; } System.out.println(lineNo); } - person syeda firdaus; 26.05.2015
comment
не могли бы вы сообщить мне, как решить проблему? Как бороться с нежелательной новой строкой (\n\r)? Есть ли способ удалить ненужные новые строки? - person syeda firdaus; 26.05.2015