簡體   English   中英

帶有[\\ d] *的String.replaceAll()在字符之間附加替換字符串,為什么?

[英]String.replaceAll() with [\d]* appends replacement String inbetween characters, why?

我現在已經嘗試了幾個小時來獲得一個正則表達式語句,該語句將匹配未知數量的連續數字。 我相信[0-9] *或[\\ d] *應該是我想要的,當我使用Java的String.replaceAll時,它將我的替換字符串添加到不應該與正則表達式匹配的位置。

例如:我有一個輸入字符串“這是my99String問題”如果我的替換字符串是“〜”

當我跑這個

myString.replaceAll("[\\d]*", "~" )

要么

myString.replaceAll("[0-9]*", "~" )

我的返回字符串是“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ M〜”

正如您所看到的那樣,數字已被替換,但為什么它也會在字符之間追加我的替換字符串。

我希望它看起來像“這是我的〜字符串問題”

我做錯了什么,為什么java匹配這樣。

\\\\d*匹配0位或更多位數,因此它甚至匹配空字符串。 並且在字符串中的每個字符之前都有一個空字符串。 因此,對於它們中的每一個,它都用~替換它,因此得到結果。

請嘗試使用\\\\d+ 而且您不需要在字符類中包含\\\\d

[\\d]*

匹配零或更多 (由*定義)。 因此,你通過你的字符串獲得匹配。 如果你使用

[\\d]+

這將匹配1個或更多數字。

來自doc

Greedy quantifiers
X?  X, once or not at all
X*  X, zero or more times
X+  X, one or more times

暫無
暫無

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

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