Android - 在String中换行符? (段落)

时间:2012-03-12 21:54:09

标签: java android regex string split

我目前正在从包含一些段落的文本文件(.txt)中检索一些信息。当我从文本文件中检索字符串时,我想将其拆分,以便我每个段落都在String对象中。

以下是我从文本文件中获取的文字: http://www.carlowweather.com/plaintext.txt

我尝试使用换行符拆分字符串并返回托架Feed,但似乎都不起作用,请参阅下面的代码:

 int pCount=0;
public void parseData(String data){
    String regex = "(\\n)";
    String split[] = data.split(regex);
    for(int i = 0; i<split.length; i++){ 
        Log.e("e", pCount + " " + split[i]);
        pCount ++;
    }
}

我也试过“\ r”和我通过搜索网找到的各种组合,但似乎没有在这个文本文件的Android上工作,我猜这个文件不包含换行符或回车符?但只是空白?

将段落拆分为String对象的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

我认为最简单的方法是使用Scanner

Scanner sc = new Scanner(new File("donal.txt"), "UTF-8");
sc.useDelimiter("\n[ \t]*\n");

List<String> result = new ArrayList<String>();
int lineCount = 0;
while (sc.hasNext())
{
  String line = sc.next();
  System.out.printf("%n%d:%n%s%n", ++lineCount, line);
  result.add(line);
}
System.out.printf("%n%d paragraphs found.%n", lineCount);

第一段和最后一段实际上是页眉和页脚;我不知道你想做些什么。

为了便于阅读,我假设行分隔符始终是Unix风格的\n,但为了安全起见,您应该允许Windows风格的\r\n和更旧的Mac风格\r也是如此。这将使正则表达式:

"(?:\r\n|[\r\n])[ \t]*(?:\r\n|[\r\n])

答案 1 :(得分:2)

我认为问题是段落之间有几个不同的字符(空格,换行和回车)。试试这个:

int pCount=0;
public void parseData(String data){
    String regex = "([ \\t\\r]*\\n[ \\t\\r]*)+"; // Only this line is changed.
    String split[] = data.split(regex);
    for(int i = 0; i<split.length; i++){ 
        Log.e("e", pCount + " " + split[i]);
        pCount ++;
    }
}

答案 2 :(得分:2)

以下代码将告诉您新的段落中断的位置。在那之后,你可以自己处理它。它只是查找只有“”的行。 这是您引用的文件的特征。我已经在下面的代码示例中包含了用于读取文件的过程,因为您没有在原始问题中指定该过程。我有一个想法是你逐行读取文件,然后尝试在每一行上执行regEx。如果您将所有文本文件读入一个字符串,我会认为以前的建议会有效。

此外,您可以将下面的代码分解为另一个函数。

        try {
        BufferedReader in = new BufferedReader(new FileReader("plaintext.txt"));
        String inputDataLine;
        while ((inputDataLine = in.readLine()) != null) {
            if (!(inputDataLine.contentEquals(" "))) {
                System.out.println("What you want to do with a paragraph line");
            } else {
                System.out.println("What you want to do with a paragraph seperator");
            }
        }
        in.close();
    } catch (IOException e) {
    }

答案 3 :(得分:1)

我现在无法在Java中尝试它,但似乎源文件在每行的开头都有一个空格(包括空格),并且<cr><lf>组合可以转到下一行线。 用于匹配空白行的安全性的标准正则表达式是(对于Java字符串定义的引用):

"^ *$"