我有一些代码设置来删除标题中单词之间的多余空格
String formattedString = unformattedString.replaceAll(" +"," ");
我对这种正则表达式的理解是,它将在停止之前匹配尽可能多的空格。但是,我输出的字符串并没有以任何方式改变。有没有可能它一次只匹配一个空格,然后用一个空格替换它?replaceAll方法有没有什么东西会改变这种类型的匹配在这里的工作方式呢?
发布于 2011-07-09 00:28:56
更好的方法可能是使用"\\s+"
来匹配所有可能的空格字符。
编辑
另一种方法可能是提取"\\b([A-Za-z0-9]+)\\b"
的所有匹配项,然后使用空格将它们连接起来,这样您就可以删除除有效单词和数字之外的所有内容。
如果需要保留标点符号,请使用"(\\S+)"
,它将捕获所有非空格字符。
发布于 2011-07-09 00:29:57
你确定你输入的是空格而不是制表符?下面的代码在空格上更具“侵略性”。
String formattedString = unformattedString.replaceAll("\\s+"," ");
发布于 2011-12-14 04:21:38
所有响应都应该有效。
两者:
String formattedString = unformattedString.replaceAll(" +"," ");
或
String formattedString = unformattedString.replaceAll("\\s+"," ");
也许您的unformattedString是一个多行表达式。在这种情况下,您可以实例化一个模式对象
String unformattedString = " Hello \n\r\n\r\n\r World";
Pattern manySpacesPattern = Pattern.compile("\\s+",Pattern.MULTILINE);
Matcher formatMatcher = manySpacesPattern.matcher(unformattedString);
String formattedString = formatMatcher.replaceAll(" ");
System.out.println(unformattedString.replaceAll("\\s+", " "));
或者也许unformattedString有特殊的字符,在这种情况下,你可以在编译方法中使用模式标志。示例:
Pattern.compile("\\s+",Pattern.MULTILINE|Pattern.UNIX_LINES);
或
Pattern.compile("\\s+",Pattern.MULTILINE|Pattern.UNICODE_CASE);
https://stackoverflow.com/questions/6627399
复制相似问题