簡體   English   中英

如何刪除字符串中$之后的空格?

[英]How do I remove the space after a $ in a String?

我有一個輸入,$和值之間有一個空格,我想刪除空格。 這段代碼:

System.out.println("This costs $ 5 even.".replaceAll("\\$ ", "$"));

應該打印出來:

This costs $5 even.

但它拋出一個異常:

Illegal group reference: group index is missing
java.lang.IllegalArgumentException
    at java.util.regex.Matcher.appendReplacement(Matcher.java:819)
    at java.util.regex.Matcher.replaceAll(Matcher.java:955)
    at java.lang.String.replaceAll(String.java:2223)
    at DollarTest.test(DollarTest.java:18)

我想念什么?

只需使用replace()

System.out.println("This costs $ 5 even.".replace("$ ", "$"));

問題在於,在正則表達式替換字符串中, $是特殊的。 應該使用它來指代正則表達式本身的捕獲組。

您需要對其進行轉義:

.replaceAll("\\$ ", "\\$")

但是正如@pp_所提到的 ,最好在這里使用普通的.replace()

另一種選擇-將$和值分組在空格周圍,然后在替換中合並它們。

String s = "This costs $ 5 even. That costs $ 6 even. This is a $ sign.";
System.out.println(s.replaceAll("(\\$)\\s(\\d+)", "$1$2"));

輸出量

This costs $5 even. That costs $6 even. This is a $ sign.

它還指出了其他答案中的缺陷

String s = "This costs $ 5 even. That costs $ 6 even. This is a $ sign.";
System.out.println(s.replaceAll("\\$ ", "\\$"));

輸出"$sign"

This costs $5 even. That costs $6 even. This is a $sign.

我建議您使用以下正則表達式刪除$和下一個數字之間的任意數量的空格。

try {
    String data = "This costs $          7 even";
    String resultString = data.replaceAll("(?is)(?<=\\$)\\s*(?=\\d+)", "");
    System.out.println(resultString);

} catch (PatternSyntaxException ex) {

}

輸入:

This costs $ 5 even
This costs $6 even
This costs $          7 even
This costs $          77 even
This costs $          7.2 even
This costs $          0.21 even
It's cost is between $   5.2 and $   8.3
You don't have to pay top $ for this.

輸出:

This costs $5 even
This costs $6 even
This costs $7 even
This costs $77 even
This costs $7.2 even
This costs $0.21 even
It's cost is between $5.2 and $8.3
You don't have to pay top $ for this.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM