无法摆脱java中的额外空间

时间:2015-04-05 19:30:04

标签: java

我有额外的空格,例如“ - - - - ”我正试图删除...我尝试使用正则表达式“\ 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

2 个答案:

答案 0 :(得分:2)

代码点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: "- - - "

答案 1 :(得分:0)

\s+仅匹配Unicode空白字符的some。如果您要覆盖all of them,请调整您的方法以检查这些字符中的任何字符,而不是仅检查空格。