2017-05-31 69 views
1

我試圖從文本文件解析文本,然後用文字分割。然而,當拆分採取的話,它不認可一個新的行作爲一個空間? 有時會識別下一行上的空格,但如果在單詞繼續之前有兩行新行,則不會。解析文件中的文本時沒有空格換行?

我在每一個新行上放一個空格來避免它。

這是一個正常的行爲,以及如何避免它?

例如,使用一個文本文件與:這是一個測試「進入」檢查「進入進入」東西在這個文本「輸入」(打字輸入如所著)

package textparseproblem; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import javax.swing.JFileChooser; 

public class TextParseProblem { 
JFileChooser chooser = new JFileChooser(); 
File f; 
String so = ""; 
public static void main(String[] args) throws InterruptedException, Exception { 
    new TextParseProblem().openFchooser(); 
} 

private void openFchooser() throws FileNotFoundException, IOException, InterruptedException, Exception { 
    int returnVal = chooser.showOpenDialog(null); 
    if(returnVal == JFileChooser.APPROVE_OPTION) { 
    f = chooser.getSelectedFile(); 
    } loadFile(f); 
} 

private void loadFile(File fileC) throws IOException { 
    try (BufferedReader reader = new BufferedReader(new FileReader(f))) { 
    while (true) { 
    String s = reader.readLine(); 
    if (s == null) break; 
    so += s; 
    } 
    } parseMethod(); 
} 

private void parseMethod() { 
    String[] sa1 = so.split("\\s"); 
    for(String soo : sa1) { 
    System.out.println(soo); 
    } 
} 
} 
+0

換行不包括在結果從的readLine()。 Se [文檔](http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()) – OldProgrammer

+2

將so + = s更新爲so + =「」+ s 。您正在追加沒有分離的行。 – Kajal

+0

空格字符和行結束符是不同的。在Windows中,行通過字符返回+換行符(\ r + \ n)終止,而在大多數其他系統上,行終止於簡單換行。 –

回答

1

根據你的戰略,一個的方法是增加額外的「空間」的字符串(讀取線)之間,這樣你就可以在以後認出他們:

private void loadFile(File fileC) throws IOException { 
    try (BufferedReader reader = new BufferedReader(new FileReader(f))) { 
     while (true) { 
      String s = reader.readLine(); 
      if (s == null) { 
       break; 
      } 
      so += " "+s; // here 
     } 
    } 
    parseMethod(); 
} 

如果萬一你的字符串有更多的「空間」,你可以在你將會對其進行解析更正此方法:

private void parseMethod() { 
    String[] sa1 = so.split("\\s+"); // to recognize some spaces 
    for (String soo : sa1) { 
     System.out.println(soo); 
    } 
} 

其他方法不需要改變

+0

這很好用。不過,我認爲包含「\\ s +」很好。謝謝 –