我逐行循环浏览文本文件,对于每一行,我检查一行"是否以空格和换行符\n
"结尾,然后我要取消换行并离开空间。
假设我有一个包含以下文字的文本文件:
Hello world,
this is me.
注意:" Hello world,"之后有一个空格。和换行。
Hello world, this is me.
这是我的代码:
String line;
while ((line = br.readLine()) != null) {
if (line.endsWith(" ")) {
bw.write(line.replaceFirst(" \n", " "));
}
}
正则表达式看起来效果不佳。它匹配第一个空格而不考虑换行\n
条件!有任何想法吗?我只想取消以空格结尾的每个字符串行中的换行符。
\n
!答案 0 :(得分:4)
根据我对您的问题的解读,看起来您想要转变:
A line Another line that ends with a space_ Finally the end
(_
表示尾随空格的地方):
A line Another line that ends with a space Finally the end
如果是这种情况,应该这样做(假设bw
是BufferedWriter
):
String line;
while ((line = br.readLine()) != null) {
/* We always write out the line (without an end-of-line character(s)) */
bw.write(line);
/* If the line does not end with a space, write out an end-of-line character */
if (!line.endsWith(" ")) {
bw.newLine();
}
}
更新:您要求解释您的代码无效的原因,以下是您的代码:
/* 1 */ String line;
/* 2 */ while ((line = br.readLine()) != null) {
/* 3 */ if (line.endsWith(" ")) {
/* 4 */ bw.write(line.replaceFirst(" \n", " "));
/* 5 */ }
/* 6 */ }
第1,5和6行无需解释。
BufferedReader
询问一行,并检查返回的String
是否不是null
。如果是null
,那么您已到达流的末尾。line
是否以空格结尾。replaceFirst
上致电line
,并将结果写为bw
,BufferedWriter
。<强>问题强>:
line
不以空格结尾,则line
不执行任何操作。你根本不写出来。replaceFirst
的调用永远不会做任何事情,因为" \n"
永远不会匹配。关于问题本身和这个答案,有很多关于这一点的评论,但是你很清楚:String
返回的BufferedReader.readLine()
永远不会包含行尾字符,如the documentation for BufferedReader.readLine()
所述:返回:包含行内容的字符串,不包括任何行终止字符;如果已到达流末尾,则返回null