我目前正在从包含一些段落的文本文件(.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对象的最佳方法是什么?
答案 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字符串定义的引用):
"^ *$"