2013-07-04 3 views
1

Я хотел бы прочитать текстовый файл, который имеет некоторые строки, такие как:Как разобрать конец строки строки в Java

abc 
def 

ghi 
jkl 

mno 
pqr 

Я использую время цикла для чтения только пару и хранить их в ArrayList. Я хотел бы остановиться, как только я столкнулся с пустой строкой (\n), например. после def. Но мой код не работает ... что я делаю неправильно?

while(!"\n".equals(sCurrentLine)) { 
    -- do stuff -- 
} 
+0

Что не работает? –

+1

while (! "". Equals (sCurrentLine))? – vikingsteve

+0

Какой читатель вы используете? Попробуйте '! SCurrentLine.equals (" ")' –

ответ

8

Если вы читаете построчно, то пустая строка пустая строка (""), не "\n" что строка длины 1

Вам также может понадобиться проверить, что там нет больше строк в этом case BufferedReader.readLine() null null

+0

он хочет прочитать одну пару, тогда есть строка с разделителем строк, тогда есть еще пара, поэтому нет пустой строки, которую он может использовать как условие! –

+0

Согласно его примеру, после каждой пары – RiaD

+0

есть одна и эта проблема: он хочет разбить сразу после первой пары. поэтому он должен проверить разделитель строк («\ n») –

0

Вы должны использовать System.getProperty("line.separator") вместо системы, зависящей от системы.

+0

Это не поможет, если вы читаете файл, созданный в другой системе. – jnovacho

+0

Это не поможет, если вы используете readLine(), как OP. – EJP

2

Вы делаете одну большую ошибку: вы предполагаете, что символ новой строки \n, что не всегда верно. В зависимости от операционной системы это может быть CR, LF или CRLF.

Вы можете продолжать проверять его на своем пути, но вам придется проверить его на все эти три возможности.

Вы можете также использовать String.trim(), а затем сравнить строку "".equals(var.trim())

+0

Его «большая ошибка» такая же, как и ваша большая ошибка: не зная, что readLine() * удаляет * терминаторы линий. Так что они абсолютно неактуальны. -1 – EJP

+0

@EJP Как вы знаете, что он читает с помощью 'readline()'? Это не показано в его коде. Если он действительно это делает, тогда вы правы, но, поскольку я этого не знаю, мой ответ стоит. Во всяком случае, это может быть полезно кому-то в будущем, постоянно напоминающему всем о кодировании и концах, как 10% SO;) – Dariusz

2
while(!"".equals(sCurrentLine)) { 
-- do stuff -- 
} 

Это поможет

import java.io.*; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class AddToArrayList { 
public static void main(String[] args) throws IOException { 
    Scanner sc=new Scanner(new File("D:\\Text.txt")); 
    ArrayList<String> str=new ArrayList<>(); 
    String s=null; 
    while (sc.hasNext()){ 
     s=sc.nextLine(); 
     if(s.equals("")){ 
      continue; 
     } 
     str.add(s); 
    } 
} 
} 
+0

@MarvinEmilBrach Ok. Проверьте мой код, он решит проблему. –

+0

. Простой код не является ответом. Вы должны сказать * почему * это отвечает на вопрос. Вам также необходимо обосновать свой переход с readLine() на сканер, что на самом деле совершенно бессмысленно. Здесь есть только одна строка, которая действительно актуальна. – EJP

1

Вы можете сделать что-то вроде этого

Успенская 1, вы должны добавить пары пропускают пустые строки.

String line = null; 
     while ((line = br.readLine()) != null) { 
      //when we encounter a empty line we continue 
      //the loop without doing anything 
      if (line.trim().isEmpty()) { 
       continue; 
      } 
      //add to list 
     } 

Допущение 2, вы хотите выйти на первую пустую строке

String line = null; 
    while ((line = br.readLine()) != null) { 
     //when we encounter a empty line we exit the loop 
     if (line.trim().isEmpty()) { 
      //break the loop 
      break; 
     } 
     //add to list 
    } 

Надеется, что это помогает.