如何从Java中的文件中删除换行符?
我怎样才能取代Java中的string的所有换行符在Windows和Linux(即没有回车/换行符/新行等操作系统特定问题)的方式?
我试过了(注意readFileAsString是一个读取文本文件为String的函数):
String text = readFileAsString("textfile.txt"); text.replace("\n", "");
但是这似乎不起作用。
如何才能做到这一点?
您需要将text
设置为text.replace()
的结果:
String text = readFileAsString("textfile.txt"); text = text.replace("\n", "").replace("\r", "");
这是必要的,因为string是不可变的 – 调用replace
不会改变原来的string,它会返回一个新的被更改的string。 如果您不将结果分配给text
,则新的string将丢失并收集垃圾。
至于为任何环境获取换行string – 通过调用System.getProperty("line.separator")
可用。
正如在其他答案中指出的,你的代码不工作主要是因为String.replace(...)
不改变目标string。 (它不能 – Javastring是不可变的!)它实际上做的是创build一个新的string,并根据需要更改字符。 但是,你的代码然后抛出该string…
以下是一些可能的解决scheme 哪一个最正确取决于你正在做什么。
// #1 text = text.replace("\n", "");
只需删除所有换行符。 这不适应Windows或Mac行终止。
// #2 text = text.replace(System.getProperty("line.separator"), "");
删除当前平台的所有行终止符。 这并不适用于您正在尝试在Windows上处理(例如)UNIX文件的情况,反之亦然。
// #3 text = text.replaceAll("\\r|\\n", "");
删除所有的Windows,UNIX或Mac行终止符。 但是,如果input文件是文本,则会连接单词; 例如
Goodbye cruel world.
变
Goodbye cruelworld.
所以你可能真的想这样做:
// #4 text = text.replaceAll("\\r\\n|\\r|\\n", " ");
用一个空格replace每个行结束符。
如果只想删除当前操作系统上有效的行结束符,可以这样做:
text = text.replaceAll(System.getProperty("line.separator"), "");
如果你想确保你删除任何行分隔符,你可以这样做:
text = text.replaceAll("\\r|\\n", "");
或者稍微冗长些,但less一些正则性:
text = text.replaceAll("\\r", "").replaceAll("\\n", "");
str = str.replaceAll("\\r\\n|\\r|\\n", " ");
经过多次search,完全为我工作,每一行都失败了。
linebreaks在windows / linux / mac下是不一样的。 你应该使用System.getProperties和属性line.separator。
这将是有效的,我猜
String s; s = "try this\n try me."; s.replaceAll("[\\r\\n]+", "")
编辑为语法高亮
String text = readFileAsString("textfile.txt").replace("\n","");
.replace返回一个新的string,Java中的string是不可变的。
你可能想用BufferedReader
读你的文件。 这个课程可以将input分解为单独的行,您可以随意组合。 无论当前的平台如何, BufferedReader
操作的方式都能自动识别Linux,Windows和MacOS世界的行结束约定。
因此:
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();
请注意, readLine()
在返回的string中不包含行结束符。 上面的代码附加了一个空格,以避免将行的最后一个单词和下一行的第一个单词粘合在一起。
String text = readFileAsString("textfile.txt").replaceAll("\n", "");
即使在oracle网站中trim()的定义是“返回string的副本,省略了前导和尾随的空白”。
它省略了新的线条特征以及领先的空间。
总之String text = readFileAsString("textfile.txt").trim();
也将为你工作(用Java6进行检查)
(Apache)的StringUtils在这里还没有被覆盖,我感到很奇怪。
你可以使用.replace
方法从一个string中删除所有换行符(或任何其他的子string)
StringUtils.replace(myString, "\n", "");
这一行将用空stringreplace所有换行符。
因为换行符在技术上是一个字符,你可以select使用replace字符的.replaceChars
方法
StringUtils.replaceChars(myString, '\n', '');
仅供参考,如果你可以用单行换行代替同时多行突破,那么你可以使用
myString.trim().replaceAll("[\n]{2,}", "\n")
或者用一个空格replace
myString.trim().replaceAll("[\n]{2,}", " ")
你可以使用apache的commons IOUtils遍历这行,并把每行添加到StringBuilder中。 别忘了closuresInputStream
StringBuilder sb = new StringBuilder(); FileInputStream fin=new FileInputStream("textfile.txt"); LineIterator lt=IOUtils.lineIterator(fin, "utf-8"); while(lt.hasNext()) { sb.append(lt.nextLine()); } String text = sb.toString(); IOUtils.closeQuitely(fin);
您可以使用generics方法来replace任何字符的任何字符。
public static void removeWithAnyChar(String str, char replceChar, char replaceWith) { char chrs[] = str.toCharArray(); int i = 0; while (i < chrs.length) { if (chrs[i] == replceChar) { chrs[i] = replaceWith; } i++; } }
此函数将所有空白(包括换行符)归一化为单个空格。 并不完全是原始问题的要求,而是可能在许多情况下完成所需要的:
import org.apache.commons.lang3.StringUtils; final String cleansedString = StringUtils.normalizeSpace(rawString);
尝试这样做:
textValue= textValue.replaceAll("\n", ""); textValue= textValue.replaceAll("\t", ""); textValue= textValue.replaceAll("\\n", ""); textValue= textValue.replaceAll("\\t", ""); textValue= textValue.replaceAll("\r", ""); textValue= textValue.replaceAll("\\r", ""); textValue= textValue.replaceAll("\r\n", ""); textValue= textValue.replaceAll("\\r\\n", "");