我有多余的空格,例如“----”,我要删除...我尝试使用正则表达式“ \ s +”以及编写自己的函数。
System.out.println(test.removeExtraSpaces("- - - "));
System.out.println(test.removeExtraSpaces("- - - "));
我的结果是
- - -
- - -
我第一个物理地键入“空格”,每个破折号之间有3个空格,第二个来自导入文件。我认为我遇到的问题是它们不是“真实”空间或具有不同unicode或其他内容的空间,但我不知道如何删除它们。
我开始使用正则表达式,但是没有用,我尝试了这个,结果是图像
public String removeExtraSpaces(String s){
s.trim();
String newString = "";
for(int i = 0; i < s.length() - 1; i++){
if(s.charAt(i) != ' '){
newString = newString + s.charAt(i);
}
else{
if(s.charAt(i + 1) != ' '){
newString = newString + s.charAt(i);
}
}
}
newString = newString + s.charAt(s.length()-1);
return newString.trim();
}
这是结果
http://i.imgur.com/WPAF8TB.png
编辑:人们一直在建议我已经尝试过的正则表达式,但这是正则表达式不起作用的证明:http://i.imgur.com/IgY2v0r.png
最佳答案
代码点为160
的字符为non-breaking space,不会被视为空格,因此\\s
将无法与之匹配。如果要替换任何类型的空格(包括不间断空格)和任何空格(例如制表符\t
或换行符\n
\r
),请尝试
replaceAll("[\\p{Zs}\\s]+"," ")
来自http://www.regular-expressions.info/unicode.html
\p{Zs}
将匹配任何类型的空格字符演示:
char[] arr = { 45, 32, 160, 32, 45, 32, 160, 32, 45, 32, 160 };
String str = new String(arr);
System.out.println("original: \"" + str + "\"");
str = str.replaceAll("[\\p{Zs}\\s]+", " ");
System.out.println("replaced: \"" + str + "\"");
输出:
original: "- - - "
replaced: "- - - "