2012-04-08 44 views
6

我想讀取本地txt文件並讀取此文件中的文本。在那之後,我想把整個文本分成如下例所示的字符串。將文本文件拆分爲空行上的字符串

例: 可以說,文件中載有以下

abcdef         
ghijkl 

aededd    
ededed 

ededfe 
efefeef 
efefeff 

...... 
...... 

我想分裂這個文本字符串

s1 = abcdef+"\n"+ghijkl; 

s2 = aededd+"\n"+ededed; 

s3 = ededfe+"\n"+efefeef+"\n"+efefeff; 

........................ 

我的意思是我想在空行分割文本。

我知道如何讀取文件。我想分裂幫助文本中字符串

+0

你確定讀取整個文件然後拆分這麼長的字符串是個好主意嗎?我建議你改用行讀取,通過''n''將它們附加到''StringBuilder''直到讀取空行。 – 2012-04-08 20:01:24

+0

'string.split(「\ n \ r」)' 找到這個答案[here](http://stackoverflow.com/questions/11717667/how-to-split-string-with-empty-new-line) – Shushan 2017-01-20 11:42:12

回答

6

您可以將字符串通過

String.split(); 

如果你想通過新的行拆分爲數組這將是

String.split("\\n\\n"); 

UPDATE *

如果我明白你在說什麼,那麼約翰。

那麼你的代碼將主要是

BufferedReader in 
    = new BufferedReader(new FileReader("foo.txt")); 

List<String> allStrings = new ArrayList<String>(); 
String str =""; 
while(true) 
{ 
    String tmp = in.readLine(); 
    if(tmp.isEmpty()) 
    { 
     if(!str.isEmpty()) 
     { 
      allStrings.add(str); 
     } 
     str= ""; 
    } 
    else if(tmp==null) 
    { 
     break; 
    } 
    else 
    { 
     if(str.isEmpty()) 
     { 
      str = tmp; 
     } 
     else 
     { 
      str += "\\n" + tmp; 
     } 
    } 
} 

可能是你正在試圖解析什麼。

其中allStrings是所有字符串的列表。

+0

我認爲這種模式應該是\\ n \\ n雙線。 – GavinCattell 2012-04-08 19:48:53

+0

@GavinCattell謝謝,更新 – Kevin 2012-04-08 19:49:32

+0

不在新行上我想在空行上拆分字符串,因爲字符串可以是任意行數。 – 2012-04-08 19:49:45

4

這可能取決於該文件的編碼,所以我可能會做到以下幾點:

String.split("(\\n\\r|\\n|\\r){2}"); 

一些文本文件編碼換行符「\ n \ r」,而另一些可能是簡單的「\ n」 。連續兩行表示您有空行。

4

即使在有用數據之間有2條以上的空行,下面的代碼也可以工作。

import java.util.regex.*; 

// read your file and store it in a string named str_file_data 

Pattern p = Pattern.compile("\\n[\\n]+");  /*if your text file has \r\n as the newline character then use Pattern p = Pattern.compile("\\r\\n[\\r\\n]+");*/ 
String[] result = p.split(str_file_data); 

(我沒有測試代碼,所以有可能是拼寫錯誤。)

3

我建議更一般的正則表達式:

text.split("(?m)^\\s*$"); 

在這種情況下,它會正常工作的任何最終而且還會處理相同的空白空白行。

2

戈德溫走上了正軌,但我認爲我們可以讓這項工作更好一點。在regx中使用'[]'是一個或者,在他的例子中,如果你有一個\ r \ n只是一個不是空行的新行。正則表達式會將它分割在\ r和\ n上,我相信在我們尋找一個空行的例子中,它將需要一個\ n \ r \ n \ r,a \ r \ n \ r \ n,a \ r \ n \ n \ r或\ n \ n或\ r \ r因此,我們首先要尋找\ n \ r或\ r \ n兩次,兩者的任意組合都是可能的。

String.split(((\\n\\r)|(\\r\\n)){2})); 

接下來我們需要尋找\ r無\ n之後

String.split(\\r{2}); 

最後,讓我們爲\ n

String.split(\\n{2}); 

而且所有一起做同樣的,應該是

String.split("((\\n\\r)|(\\r\\n)){2}|(\\r){2}|(\\n){2}");

請注意,這僅適用於使用新行和字符返回的特定示例。我在紅寶石你可以做以下將包括更多的案件。我不知道在Java中是否有相同的東西。

.match($^$) 
相關問題