我想读取本地txt文件并读取此文件中的文本。之后,我想将整个文本拆分为Strings,如下例所示。
示例: 假设文件包含 -
abcdef
ghijkl
aededd
ededed
ededfe
efefeef
efefeff
......
......
我想将此文本拆分为字符串
s1 = abcdef+"\n"+ghijkl;
s2 = aededd+"\n"+ededed;
s3 = ededfe+"\n"+efefeef+"\n"+efefeff;
........................
我的意思是我想在空行上分割文字。
我知道如何阅读文件。我想要帮助将文本拆分为字符串
答案 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)
首先,我们要查找\ 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);
}