Can';在java中不能去掉多余的空间

Can';在java中不能去掉多余的空间,java,Java,我有额外的空间,例如“--”,我正试图删除。。。我尝试使用regex“\s+”以及编写自己的函数 System.out.println(test.removeExtraSpaces("- - - ")); System.out.println(test.removeExtraSpaces("-   -   -  ")); 我的结果是 - - - -   -   -   第一个是我实际输入的“空格”,每个破折号之间有3个空格,第二个是从导入文件中输入的。我认为我遇到的问题是,它们不是

我有额外的空间,例如“--”,我正试图删除。。。我尝试使用regex“\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();
}
公共字符串removeExtraSpaces(字符串s){
s、 修剪();
字符串newString=“”;
对于(int i=0;i
结果如下


编辑:人们一直在建议我已经尝试过的正则表达式,但这里有证据证明正则表达式不起作用:

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

带有代码点的字符
160
不被视为空白,因此
\\s
将无法匹配它。如果要替换任何类型的空格(包括不间断空格)和任何空格(如制表符
\t
或换行符
\n
\r
),请尝试

replaceAll("[\\p{Zs}\\s]+"," ")

\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: "- - - "

对非常感谢。这就是我一直在寻找的内容,我只是不知道从哪里开始。假设您使用的是Java 8,您能否向我们展示
Arrays.toString(yourString.chars().toArray())
的结果,这样我们就可以从您的字符串中看到字符的代码点?不一样!但这意味着什么?!编辑:哦,在你的帮助下,在底层的人帮助下,我成功了!!它是unicode 32和160。谢谢@卢克苏:没问题。但你应该考虑解决了你的问题:)我实际上是在寻找…哈哈,接受了!