从Java中的文本中删除大空间

时间:2014-04-23 09:33:58

标签: java regex string

我正在尝试删除一个大空格并在字符串中保留CR和LF字符。该字符串由Lotus Domino API生成。这基本上是由Lotus API转换为文本的eml文件。

当我执行以下操作时:

String input = "This is a      test string\r\nThis is another       test string";
String tmp = input.replaceAll("\\s+", "");
System.out.println(tmp);


Output: 
This is a test string This is another test string

Desired Output : 
This is a test string\r\nThis is another test string

删除空格不是问题,但我无法在String中保留回车符和换行符。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:8)

有一个简单的技巧,用一个否定的字符类替换\\s[^\\S\\r\\n]其中\\S是“所有不是白色字符”。

注意:如果您想在单词之间保留空格,则必须将替换字符串更改为" "

示例:

String tmp = input.replaceAll("[^\\S\\r\\n]+", " ");

注意:您也可以使用类交集:[\\s&&[^\\r\\n]]

答案 1 :(得分:4)

String tmp = input.replaceAll(" +", " ");

答案 2 :(得分:2)

String subject = "This is a      test string\r\nThis is another       test string";
String result = subject.replaceAll("(?=.*?[^\r\n])[\\s]{2,}", " ");;

积极的lookeahead而非排除\r\n - (?=.*?[^\r\n])
匹配并用1替换2个或更多空格。

<强>输出:

  

这是一个测试字符串\ r \ n这是另一个测试字符串

<强>样本: http://ideone.com/9dOiBp