[英]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.