5

Я пытаюсь прочитать строку с разделителями строк в отдельной строке. Строки разделяются с помощью возврата каретки ("\ r \ n"), а LineFeed (\ "n") разрешается внутри текстовых полей, разделенных вкладками.Java: как читать файл по строкам, игнорируя « n»

Поскольку я хочу прочитать строку «Файл» в строке, я хочу, чтобы моя программа игнорировала автономный «\ n». К сожалению, BufferedReader использует обе возможности для разделения линий. Как я могу изменить свой код, чтобы игнорировать автономный «\ n»?

try 
{ 
    BufferedReader in = new BufferedReader(new FileReader(flatFile)); 
    String line = null; 
    while ((line = in.readLine()) != null) 
    { 
     String cells[] = line.split("\t");       
     System.out.println(cells.length); 
     System.out.println(line); 
    } 
    in.close(); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 

ответ

15

Используйте java.util.Scanner.

Scanner scanner = new Scanner(new File(flatFile)); 
scanner.useDelimiter("\r\n"); 
while (scanner.hasNext()) { 
    String line = scanner.next(); 
    String cells[] = line.split("\t");       
    System.out.println(cells.length); 
    System.out.println(line); 
} 
+0

Спасибо, это работает отлично! – Del

+0

Имя метода на самом деле используетсяDelimiter (редактирование должно быть не менее 6 символов, поэтому я не могу самостоятельно отредактировать ответ) –

+0

@ Krige - очень ценится. Я исправил это. – rolfl

0

Вы могли бы просто сделать его пропустить пустые строки:

while ((line = in.readLine()) != null) { 
    // Skip lines that are empty or only contain whitespace 
    if (line.trim().isEmpty()) { 
     continue; 
    } 

    String[] cells = line.split("\t"); 
    System.out.println(cells.length); 
    System.out.println(line); 
} 
0

Вы можете использовать FileUtils.readLines методы из Apache Commons-IO.

Преимущество использования заключается в том, что вам не нужно заботиться об открытии и закрытии файла. Он обрабатывается для вас.