【问题标题】:Android - split at a line break in String? (Paragraphs)Android - 在字符串中的换行符处拆分? (段落)
【发布时间】:2012-03-12 21:54:09
【问题描述】:

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

这是我从文本文件中得到的文本: http://www.carlowweather.com/plaintext.txt

我尝试使用换行符和回车符来拆分字符串,但似乎都不起作用,请参阅下面的代码:

 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 对象的最佳方法是什么?

【问题讨论】:

  • 你可以检查一个空行 line.trim().equals("") 并打破它。

标签: java android regex string split


【解决方案1】:

我认为最简单的方法是使用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])

【讨论】:

    【解决方案2】:

    下面的代码将告诉您新的分节符存在的位置。之后将由您来处理它。它只查找带有“”的行。 这是您引用的文件的特征。我在下面的代码示例中包含了用于读取文件的过程,因为您没有在原始问题中指定。我的一个想法是您正在逐行读取文件,然后尝试在每一行上执行正则表达式。如果您将所有文本文件读入一个字符串,我会假设前面的建议会起作用。

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

            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】:

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

      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 ++;
          }
      }
      

      【讨论】:

      • 不幸的是没有工作,它没有分割任何东西,计数为 0,我只得到完整的字符串返回。不过还是谢谢。
      【解决方案4】:

      我现在无法在Java中尝试它,但似乎源文件在每一行的开头都有一个空格(包括空白的),并且有一个&lt;cr&gt;&lt;lf&gt;组合可以转到下一行。 一个标准的正则表达式来匹配这样一个空行的出现,在安全方面关于空格,是(引号用于 Java 字符串定义):

      "^ *$"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-27
        • 2015-06-17
        相关资源
        最近更新 更多