如何从字符串中删除换行符

13
String s ="SSR/DANGEROUS GOODS AS PER ATTACHED SHIPPERS
/DECLARATION 1 PACKAGE

NFY
/ACME CONSOLIDATORS"

如何去除“PACKAGE”和“NFY”之间的空格?


这是正确的答案。 - macio.Jun
5个回答

43

Java的String.replaceAll实际上采用了正则表达式。你可以使用以下代码来删除所有换行符:

string.replaceAll("\\n", "");
s = s.replaceAll("\\n", "");
s = s.replaceAll("\\r", "");

但这将会移除所有换行符。

注意双反斜杠:这样传递给正则表达式解析器的字符串才是\n

你也可以这样做,这更加智能:

s = s.replaceAll("\\s{2,}", " ");

这将删除所有长度为2或更长的空白序列,并用单个空格替换它们。由于换行符也是空格字符,因此对您来说这应该足够了。


7
同时,s.replaceAll("(?:\\n|\\r)", ""); 可以在单个语句中实现同样的效果。而且可以根据需要调整表达式以使其更具选择性。 - Romain
你可以始终匹配带有换行符的文本;你不需要一个标志来实现。MULTILINE的作用是改变锚点^$的含义,使它们能够在行边界以及整个字符串的开头和结尾进行匹配。由于你的正则表达式中没有锚点,因此MULTILINE标志无效。 - Alan Moore
1
你说得对 - 我刚试了一下,把 Pattern.MULTILINE 注释掉了。但是(我最初尝试的)s = s.replace("\\s{2,}", " "); 不起作用。它没有删除换行符。有什么想法吗? - craigmj
抱歉 - 刚意识到我使用的是 replace,而不是 replaceAll。太蠢了! - craigmj

2
s = s.replaceAll("[\\n\\r]", "");

1

尝试这段代码:

s = s.replaceAll( "PACKAGE\\s*NFY", "PACKAGE NFY" );

5
这并不够概括,无法帮助他人。 - Paul Bellora

-1

你尝试过替换函数吗?类似这样的代码:

youString.Replace("\r", "")

-3
string = string.replace(/\s{2,}/g, ' ');

1
加油,问题标记为“Java”。你不能用Java给出一个解决方案吗? - Romain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接