/ / String.replaceAll () s [d] * pripojí náhradu String inbetween characters, prečo? - java, regex

String.replaceAll () s [d] * pridáva náhradu String inbetween znaky, prečo? java, regex

Už niekoľko hodín som sa snažil získať regexpríkaz, ktorý sa bude zhodovať s neznámym množstvom po sebe idúcich čísel. Verím, že [0-9] * alebo [d] * by malo byť to, čo chcem, keď ja používam Java String.replaceAll pridáva môj náhradný reťazec v miestach, ktoré by nemali zodpovedať regex.

Napríklad: Mám vstupný reťazec typu „Toto je problém my99String“ Ak je náhradný reťazec „~“

Keď to spustím

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

alebo

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

môj návratový reťazec je "~ T ~ h ~ i ~ s ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ m ~ "

Ako vidíte, čísla boli nahradené, ale prečo je to aj pridanie môj náhradný reťazec medzi znaky.

Chcem, aby to vyzeralo ako "Toto je môj problém so Stringom"

Čo robím zle a prečo je java zodpovedajúce takto.

odpovede:

9 pre odpoveď č. 1

\d* zodpovedá 0 alebo viacerým číslam, a tak sa zhoduje s prázdnym reťazcom. A máte prázdny reťazec pred každým znakom v reťazci. Takže pre každú z nich ju nahradí ~, preto výsledok.

Skúste použiť \d+ miesto. A nemusíte zahrnúť \d v triede znakov.


1 pre odpoveď č. 2
[\d]*

zápasy nula alebo viac (ako je definované v. \ t *). Preto ste "znovu dostať všetky zápasy prostredníctvom svojich reťazcov. Ak používate

[\d]+

ktoré sa zhodujú s 1 alebo viacerými číslami.

z doc:

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