字符串如下所示:" I am seal \n\n \t where are we? "
。和印刷版
I am seal
where are we?
我想将字符串设为:"I am seal\nwhere are we?"
I am seal
where are we?
我正在删除"[\r\n]+", "\n"
此正则表达式的新行,但问题是当我尝试删除空格时,它也会删除换行符。我使用了StringUtils
中的Apache-common
。
更新
也可以删除一行开头的空白区域。它不应该是连续的。
我如何在 Java ?
中实现这一目标谢谢。
答案 0 :(得分:4)
更新#2
捕获所有初始空格(插入符^
断言我们处于行首)和其他连续空格:
^\\s+|[\\t\\f ](?=[\\t\\f ])|[\\t\\f ]$|\\s+\\z
将其替换为空(多线修改器非常重要):
String str = " I am seal \n\n \t where are we? ";
String result = str.replaceAll("(?m)(^\\s+|[\\t\\f ](?=[\\t\\f ])|[\\t\\f ]$|\\s+\\z)", "");
System.out.println(result);
同样在class intersection的帮助下,我们可以使用更短的正则表达式:
^\\s+|[\\s&&[^\\r\\n]](?=\\s|$)|\\s+\\z
答案 1 :(得分:1)
您问题中的所有空格和换行符之间存在差异 使用单个正则表达式,您可以决定要替换哪个。
空格或换行符。
唉,这需要一个回调函数来查看哪一个匹配
([^\S\r\n])+|(?:\r?\n)+
第1组?替换为空格:否则换成换行符。
更简单的方法是在两个单独的步骤中完成。
用空格替换所有[^\S\r\n]+
然后用换行符替换所有(?:\r?\n)+
。
您可以使用范围{2,}
代替+
,这可能会给您一个边际
性能提升。
答案 2 :(得分:0)
str = str.trim().replace("\t", " ");
while (str.contains(" ") || str.contains("\n\n")) {
while (str.contains(" ")) {
str = str.replace(" ", " ");
}
while (str.contains("\n\n")) {
str = str.replace("\n\n", "\n");
}
while (str.contains("\n ")) {
str = str.replace("\n ", "\n");
}
}