将文本文件拆分为空行中的字符串

时间:2012-04-08 19:45:03

标签: java regex split

我想读取本地txt文件并读取此文件中的文本。之后,我想将整个文本拆分为Strings,如下例所示。

示例:  假设文件包含 -

 abcdef                                 
 ghijkl

 aededd               
 ededed

 ededfe
 efefeef
 efefeff

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

我想将此文本拆分为字符串

s1 = abcdef+"\n"+ghijkl;

s2 = aededd+"\n"+ededed; 

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

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

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

我知道如何阅读文件。我想要帮助将文本拆分为字符串

6 个答案:

答案 0 :(得分:9)

您可以通过

将字符串拆分为数组
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是所有字符串的列表。

答案 1 :(得分:4)

即使有用数据之间有两行以上的空行,下面的代码也能正常工作。

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);

(我没有测试代码,因此可能存在拼写错误。)

答案 2 :(得分:3)

这可能取决于文件的编码方式,因此我可能会执行以下操作:

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

某些文本文件将换行符编码为“\ n \ r”,而其他文本文件可能只是“\ n”。连续两行表示你有一个空行。

答案 3 :(得分:3)

我建议更一般的正则表达式:

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

在这种情况下,它可以在任何行尾约定上正常工作,并且还会处理相同的空行和空白行。

答案 4 :(得分:2)

戈德温走在正确的轨道上,但我认为我们可以让这项工作更好一点。在regx中使用'[]'是一个或者,所以在他的例子中,如果你有一个\ r \ n,它只是一个新行,而不是一个空行。正则表达式会在\ r和\ n上分割它,我相信我们在寻找一个空行的例子,它需要一个\ n \ r \ n \ r,一个\ r \ n \ n \ r \ n,\ n \ r \ n \ n \ n,\ r \ n \ n \ r \ n或\ n \ n或\ r \ n \ r \ n

首先,我们要查找\ n \ r或\ r \ n两次,两者的任意组合都是可能的。

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

接下来我们需要查找\ r \ n后面没有\ n

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

最后,让我们为\ n

做同样的事情
String.split(\\n{2});

所有这一切应该是

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

注意,这仅适用于使用新行和字符返回的非常具体的示例。我在红宝石中你可以做以下几个案例。我不知道Java中是否存在等价物。

.match($^$)

答案 5 :(得分:0)

@Kevin代码可以正常工作,并且他提到该代码未经测试,这是需要进行的三处更改:

1。首先应进行if检查(tmp == null),否则将出现空指针异常。

2。此代码省去了最后一组要添加到ArrayList的行。为了确保添加最后一个,我们必须在while循环之后添加以下代码: if(!str.isEmpty()){allStrings.add(str); }

3。行 str + =“ \ n” + tmp ;应该更改为使用 \ n ,而不是 \\ n 。请查看该线程的结尾,我已经添加了整个代码,以便可以提供帮助

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

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

        }
        if(!str.isEmpty())
        {
            allStrings.add(str);
        }