簡體   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