我正在尝试删除一个大空格并在字符串中保留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中保留回车符和换行符。非常感谢任何帮助。
答案 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