繁体   English   中英

无法摆脱Java中多余的空格

[英]Can't get rid of extra spaces in 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

代码点为160字符是不间断空格 ,不会被视为空格,因此\\\\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: "- - - "

\\s+仅与某些 Unicode空格字符匹配。 如果要覆盖所有字符,请调整方法以检查所有这些字符,而不是仅检查空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM