BufferedReader br = new BufferedReader(
new InputStreamReader("textfile.txt"));
StringBuilder sb = new StringBuilder();
for (;;) {
String line = br.readLine();
if (line == null)
break;
sb.append(line);
sb.append(' '); // SEE BELOW
}
String text = sb.toString();
16 回答
您需要将
text
设置为text.replace()
的结果:这是必要的,因为字符串是不可变的 - 调用
replace
并没有改变 . 如果未将结果分配给text
,则新的String将丢失并进行垃圾回收 .至于获取任何环境的换行符 - 可通过调用
System.getProperty("line.separator")
获得 .如其他答案所述,您的代码主要不起作用,因为
String.replace(...)
不会更改目标字符串 . (它不能 - Java字符串是不可变的!)它实际上做的是创建一个新的String,其中的字符根据需要进行了更改 . 但是你的代码然后扔掉那个String ...这是一些可能的解决方案 . 哪一个最正确取决于你究竟想要做什么 .
只需删除所有换行符 . 这不适用于Windows或Mac线路终端 .
删除当前平台的所有行终止符 . 这不适用于您尝试在Windows上处理(例如)UNIX文件的情况,反之亦然 .
删除所有Windows,UNIX或Mac行终止符 . 但是,如果输入文件是文本,这将连接单词;例如
变
所以你可能真的想这样做:
用空格替换每个行终止符 .
如果只想删除当前操作系统上有效的行终止符,可以执行以下操作:
如果要确保删除任何行分隔符,可以这样做:
或者,稍微冗长,但更少的regexy:
经过大量的搜索后,我找到了很好的工作,但每一条线路都失败了 .
我想这会很有效率
编辑语法高亮
This function将所有空格(包括换行符)向下归一化为单个空格 . 不完全是原始问题所要求的,但在很多情况下可能完全符合要求:
在windows / linux / mac下,换行符不一样 . 您应该将System.getProperties与属性line.separator一起使用 .
即使oracle网站中trim()的定义是“返回字符串的副本,也省略了前导和尾随空格 . ”
文档中没有说明新行字符(前导和尾随)也将被删除 .
简而言之
String text = readFileAsString("textfile.txt").trim();
也适合你 . (用Java 6检查).replace返回一个新字符串,Java中的字符串是不可变的 .
您可能想要使用
BufferedReader
读取文件 . 该类可以将输入分解为单独的行,您可以随意组合 . 无论当前平台如何,BufferedReader
操作的方式都能自动识别Linux,Windows和MacOS世界的行结束约定 .因此:
请注意
readLine()
在返回的字符串中不包括行终止符 . 上面的代码附加一个空格,以避免将一行的最后一个单词和下一行的第一个单词粘在一起 .我觉得奇怪的是(Apache)StringUtils还没有在这里介绍过 .
您可以使用
.replace
方法从字符串中删除所有换行符(或其他任何子串的出现)此行将使用空字符串替换所有换行符 .
因为换行在技术上是一个字符,你可以选择使用将替换字符的
.replaceChars
方法仅供参考,如果您想要使用单线中断替换同时多线断线,那么您可以使用
或者用一个空格替换
您可以使用apache commons IOUtils遍历该行并将每行附加到StringBuilder . 并且不要忘记关闭InputStream
您可以使用泛型方法将任何char替换为任何char .
org.apache.commons.lang.StringUtils#chopNewline
试着这样做: