replaceAll
използва регулярен израз като първи параметър, който ще трябва да бъде намерен, а точката .
в регулярния израз е метасимвол, който ще съответства на всички знаци с изключение на нов ред. Така че, когато използвате
s = s.replaceAll(".5", "½");
на "1.75"
.5
може да съвпада с 75
(тъй като .
съвпада с всички). Така че след такава промяна
1.75
-- will become
1.½
(забележете, че 1.25
работи правилно само защото сте използвали .25
преди .5
)
За да предотвратите подобно поведение, трябва да избягвате точка. Можете да го направите чрез
- поставяне на
\
преди него (не забравяйте, че за да създадете \
литерал, трябва да го напишете като "\\"
) "\\."
,
- поставете го в символен клас
[.]
,
- заобиколете го с
\Q
и \E
, които представляват началото и края на цитата \\Q.\\E
- обграждане с
\Q
и \E
може да се направи и с Pattern.quote(".")
- В случай на екземпляр на Pattern по време на компилиране можете да добавите флаг
Pattern.LITERAL
, за да направите всички метасимволи, използвани в литералите на шаблона.
Ако искате целият ни модел да е прост литерал, можете да използвате replace
вместо replaceAll
, което автоматично ще използва флаг Pattern.LITERAL
и ще промени всички метасимволи на регулярни изрази в прости литерали.
Така че можете да опитате нещо подобно
return s.replaceAll("\\.25", "¼").replaceAll("\\.5", "½").replaceAll("\\.75", "¾");
или по-просто
return s.replace(".25", "¼").replace(".5", "½").replace(".75", "¾");
person
Pshemo
schedule
19.12.2013