2017-09-04 1 views
0

Je dois remplacer $achieved$ à partir d'une chaîne et il devrait être insensible à la casse. Parce que parfois dans la chaîne du serveur nous obtenons $ACHIeved$, par conséquent, il devrait ignorer la casse. J'utilise le code ci-dessous. J'ai aussi essayé avec (?i) mais cela ne fonctionne pas. Peut-il être fait avec regex, si oui, quelle devrait être l'expression régulière?Remplacer par ignorer la casse sensible

Répondre

0

Tout d'abord, replace effectue le remplacement littéral de chaîne et n'accepte pas une expression régulière comme premier argument. Vous devez utiliser replaceFirst ou replaceAll. Ensuite, $ est un char regex spécial (il correspond à la fin de la chaîne), il doit donc être échappé. Vous pouvez utiliser Pattern.quote pour cela. Ainsi, vous pouvez utiliser

stringWithoutFormating = stringWithoutFormating.replaceAll("(?i)" + Pattern.quote(Constant.PROGRAM_DETAILS_ENTRY_CONTENT_FIELDS.achieved), String.valueOf(achieved).replace("$", "\\$")); 

Ici, (?i) fera le insensibles à la casse, Pattern.quote(Constant.PROGRAM_DETAILS_ENTRY_CONTENT_FIELDS.achieved) se tourneront $achieved$ en \$achieved\$, puis le remplacement aura lieu. Le .replace("$", "\\$") effectué sur le remplacement est nécessaire pour échapper littérale $ dans le remplacement.