如何从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", ""); 
    Interesting Posts