string - 如何从Java中的文件中删除换行符?
如何在Java中替换字符串中的所有换行符,以便在Windows和Linux上工作(即没有特定于OS的回车/换行/换行等问题)?
我试过了(注意readFileAsString是一个将文本文件读入String的函数):
String text = readFileAsString("textfile.txt");
text.replace("\n", "");
但这似乎不起作用。
如何才能做到这一点?
16个解决方案
352 votes
您需要将System.getProperty("line.separator")设置为text的结果:
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");
这是必要的,因为字符串是不可变的 - 调用System.getProperty("line.separator")不会更改原始字符串,它会返回一个已更改的新字符串。 如果未将结果分配给text,则会丢失新的String并收集垃圾。
至于获取任何环境的换行符 - 可通过调用System.getProperty("line.separator")获得。
Kaleb Brasee answered 2019-04-05T03:39:13Z
189 votes
如其他答案所述,您的代码无法正常工作,因为String.replace(...)不会更改目标字符串。 (它不能 - Java字符串是不可变的!)它实际上做的是创建一个新的String,其中的字符根据需要进行了更改。 但是你的代码然后扔掉那个String ...
这是一些可能的解决方案。 哪一个最正确取决于你究竟想做什么。
// #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行终止符。 但是,如果输入文件是文本,这将连接单词; 例如
Goodbye cruel
world.
变
Goodbye cruelworld.
所以你可能真的想这样做:
// #4
text = text.replaceAll("\\r\\n|\\r|\\n", " ");
用空格替换每个行终止符。
Stephen C answered 2019-04-05T03:39:54Z
18 votes
如果只想删除当前操作系统上有效的行终止符,可以执行以下操作:
text = text.replaceAll(System.getProperty("line.separator"), "");
如果要确保删除任何行分隔符,可以这样做:
text = text.replaceAll("\\r|\\n", "");
或者,稍微冗长,但更少的regexy:
text = text.replaceAll("\\r", "").replaceAll("\\n", "");
Fabian Steeg answered 2019-04-05T03:40:18Z
10 votes
str = str.replaceAll("\\r\\n|\\r|\\n", " ");
经过大量的搜索后,我找到了很好的工作,但是每一行都失败了。
Renán D answered 2019-04-05T03:40:38Z
8 votes
我想这会很有效率
String s;
s = "try this\n try me.";
s.replaceAll("[\\r\\n]+", "")
编辑语法高亮
JSBach answered 2019-04-05T03:41:01Z
7 votes
此函数将所有空格(包括换行符)向下归一化为单个空格。 不完全是原始问题所要求的,但很可能在许多情况下完全需要:
import org.apache.commons.lang3.StringUtils;
final String cleansedString = StringUtils.normalizeSpace(rawString);
David McWhorter answered 2019-04-05T03:41:21Z
6 votes
在windows / linux / mac下,换行符不一样。 您应该将System.getProperties与属性line.separator一起使用。
Aif answered 2019-04-05T03:41:41Z
3 votes
String text = readFileAsString("textfile.txt").replaceAll("\n", "");
即使oracle网站中的trim()的定义是“返回字符串的副本,省略前导和尾随空格。”
文档中没有说明新行字符(前导和尾随)也将被删除。
简而言之String text = readFileAsString("textfile.txt").trim();也适合你。 (用Java 6检查)
MukeshKoshyM answered 2019-04-05T03:42:11Z
2 votes
String text = readFileAsString("textfile.txt").replace("\n","");
.replace返回一个新字符串,Java中的字符串是不可变的。
Viktor Klang answered 2019-04-05T03:42:31Z
2 votes
您可能希望使用readLine()读取文件。此类可以将输入分解为单独的行,您可以随意组合。 无论当前平台如何,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()在返回的字符串中不包括行终止符。 上面的代码附加一个空格,以避免将一行的最后一个单词和下一行的第一个单词粘在一起。
Thomas Pornin answered 2019-04-05T03:43:07Z
0 votes
我觉得奇怪的是(Apache)StringUtils还没有在这里介绍过。
您可以使用.replaceChars方法从字符串中删除所有换行符(或任何其他出现的子串)
StringUtils.replace(myString, "\n", "");
此行将使用空字符串替换所有换行符。
因为换行在技术上是一个字符,您可以选择使用替换字符的.replaceChars方法
StringUtils.replaceChars(myString, '\n', '');
svarog answered 2019-04-05T03:43:44Z
0 votes
仅供参考,如果您想要使用单线中断替换同时多线中断,那么您可以使用
myString.trim().replaceAll("[\n]{2,}", "\n")
或者用一个空格替换
myString.trim().replaceAll("[\n]{2,}", " ")
Sourav Chandra answered 2019-04-05T03:44:08Z
0 votes
您可以使用apache commons IOUtils遍历该行并将每行附加到StringBuilder。 并且不要忘记关闭InputStream
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);
Shravan Ramamurthy answered 2019-04-05T03:44:30Z
0 votes
您可以使用泛型方法将任何char替换为任何char。
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++;
}
}
Rakesh Chaudhari answered 2019-04-05T03:44:52Z
-1 votes
org.apache.commons.lang.StringUtils#chopNewline
Kumar Abhishek answered 2019-04-05T03:45:13Z
-2 votes
试着这样做:
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", "");
seyf answered 2019-04-05T03:45:34Z