2016-07-18 3 views
1

これはWindows上です。それはクラスで作成した文字列に\ nを入れたときに機能しましたが、ファイルから同じ文字列を読み込むときには機能しません。文字列をファイルから読み取るときにString.splitが nで分割されない

String[] string = str.split(" \\n| |\\n|\n"); 

ファイル内の文字列の例:

これはテストである\ nColor:[青色、黄色、黒、緑赤] \ nDates:

コードは、私は読むために使用する場合ファイルからは、任意のrelavalenceのです:

public static String getStringArray(String filename) { 
     try { 
      return IOUtils.toString(new FileInputStream(filename), Charset.defaultCharset()); 
     } catch(IOException ex) { 
      Logger.getLogger(File.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return null; 
    } 

これはorg.apache.commons.io.IOUtilsを使用しています。

+0

あなたは '\ rを\ N 'みました:

つまり、あなたがスペースや行末に分割したいようですか?これはWindowsの新しい行です。 '\ n'で新しい行を書くことはできますが、必ずしも同じ方法でそれらを読むことはできません。 – Zircon

+0

@ Zirconちょうどそれを試してもまだ分割されません。 str.split( "\\ r \\ n | \\ n | \\ n"); – Schwarz

答えて

1

最初に、getStringArrayと呼ばれる方法は、Stringではなく、String[]を返す必要があります。

また、正規表現「(\\ n | \ r?\ n)」は(私の理解によると)あなたが期待することを行います。

リテラル "\ n"または改行で改行します。

public static String[] getStringArray(String filename) 
{ 
    try 
    { 
     String content = IOUtils.toString(new FileInputStream(filename), Charset.defaultCharset()); 
     String[] lines = content.split("(\\\\n|\\r?\\n)"); 
     return lines; 
    } catch (IOException ex) 
    { 
     Logger.getLogger(File.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return null; 
} 

または、減少した方法で:

public static String[] getStringArray(String filename) 
{ 
    try { return IOUtils.toString(new FileInputStream(filename), Charset.defaultCharset()).split("(\\\\n|\\r?\\n)"); } 
    catch (IOException ex) { Logger.getLogger(File.class.getName()).log(Level.SEVERE, null, ex); } 
    return null; 
} 

あなたは(あなたのサンプル文字列を使用して)返される配列を反復した場合は、取得します:

これはテストです。

色:青色、黄色、黒、緑赤]

日付:

0

使用(ジャワ8で導入された) "ライン終了" という表現\R

str.split("[ \R]+") 
関連する問題