2012-04-08 70 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($^$)