我有许多数据文件,其中包含连续字符块行,例如
thisisthefirstline
thisisthesecondline
thisisthethirdline
我正在阅读这些行中的每一行并将它们连接起来创建一个长字符串然后我处理它。我的问题是,是否有一种优雅的方法来处理明文文件中的行连接?
目前我正在执行以下任务:
BufferedReader br = new BufferedReader(new FileReader(sequence));
String line;
String sequence = "";
while ((line = br.readLine()) != null)
sequence += line;
// do stuff with sequence here
有没有办法只使用sequence
容器变量而不是line
临时变量来实现这个目标?
答案 0 :(得分:2)
不,每次调用BufferedReader#readLine()
都会读取,直到找到新行或流结束。因此,您不能两次调用它:一次用于null
,一次用于将其分配给某个变量。您需要一个临时占位符来比较和使用它的值。
你目前所做的事情绝对没有错。
答案 1 :(得分:1)
你快速有趣,使用readAllLines
(Java 7)并写:
List<String> lines = Files.readAllLines(Paths.get("fileName"), StandardCharsets.UTF_8);
String longString = Arrays.toString(lines.toArray()).replaceAll("\\[|\\]", "").replaceAll(", ","\t");
但是,这不是将数组转换为字符串的最佳方法。
我会使用Guava package:
String longString = Joiner.on("\t").join(lines);
答案 2 :(得分:0)
我最终使用以下循环来执行必要的字符串连接:
String seq = "";
for (String line; (line = br.readLine()) != null; )
seq += line;
虽然这不能避免使用临时变量,但我认为它比标准while-loop
方法更可取。这里,临时变量line
的范围仅限于实际发生文件处理的循环。