我正在将换行符分隔的文本文件读入String
- 数组。
因为我知道分隔符总是\n
,所以我应该能够将每个单词附加到StringBuilder,然后使用分隔符将其拆分。
简单地说,我应该使用哪种方法以及为什么?
方法A:
1.创建一个ArrayList(或其他更适合的Collection)
2.将每一行添加到列表中
3.返回list.toArray()
方法B:
1.创建一个StringBuilder
2.将每行附加到构建器
3.返回builder.split("\n")
答案 0 :(得分:1)
不确定它有多大区别,toArray
方法很可能更快,因为String
处理较少。 split
必须使用正则表达式处理整个数据; toArray
方法只需要遍历Collection
。
如果您修改方法 B ,那么您就不会逐行阅读StringBuilder
中的文件,而是使用Files.readAllBytes
来获取整个文件文件为String
然后split
您可能会发现或多或少相同的效果。
如果你有Java 8:
final Path path = /*some path*/
final String[] lines = Files.lines(path).toArray(String[]::new);
注意,使用Files.readAllLines
可以改善您的方法 A :
final String[] lines = Files.readAllLines(path, StandardCharsets.UTF_8).
toArray(new String[0]);
答案 1 :(得分:0)
可能差别很小。我不认为你正在处理非常大的文件,所以它应该没关系。如果你真的对它感兴趣,你可以描述不同的方式,但你做出的选择是无关紧要的。
如果是我的选择,我会选择ArrayList
方式,因为后续的分割似乎是多余的。
答案 2 :(得分:0)
等等,如果您以这种格式阅读文件:
A
B
C
D
E
F
为什么不在同一时间阅读并保存?
类似的东西:
BufferedReader bufferedReader = new BufferedReader(new FileReader("test.txt"));
List<String> lines = new ArrayList<String>();
for (String line; (line = bufferedReader.readLine()) != null; )
{
lines.add(line);
}
System.out.println(lines);
您的[A, B, C, D, E, F, G]
lines
将会List
。