Comment remplacer tout "(" et ")" dans une chaîne avec un style fluide, en Java? J'ai essayé de la manière suivante: mais cela ne fonctionne pas. L'erreur est la suivante: p> Je pense que ce problème sera également là dans toutes les regex. Ajouter \ code> avant
) code> n'a pas fonctionné. P> p>
9 Réponses :
Vous devez échapper au '(' code> et
')' code> avec
"\\ (" code> et
"\\)" code> respectivement:
Il y a une petite erreur dans votre réponse. Vous ne remplacez que ")". Mais aussi cela ne fonctionnera pas. Votre logique ne fonctionnera pas pour "(". URL = URL.ReplaceAll ("\ (", "."); Ne remplacera pas "("
Il fonctionne en utilisant Java 1.8+. Besoin d'ajouter 2 back slashes \\ devant (et). url = url.replaceall ("\\)", "."); est bon
Utilisez Notez que la pièce remplailleL () code>
s'attend à un Regex code> comme premier paramètre, et les paranthèses ont une signification spéciale là-bas.
remplacer () code>
à la place: p> url = code> est importante pour enregistrer le résultat du remplacement. Étant donné que
string code> s sont immuables em>, l'original
String code> n'est pas modifié, mais une nouvelle est créée. Pour conserver le résultat code> URL code> doit également pointer sur celui-ci. P> P>
"Url.replace (" (",". ") Et url.replaceall (" \ (",". ") Travailler bien. Le point ici est" URL = url.replace (...) ". Dans le Question L'URL = ... "était manquante. Ainsi, la chaîne sera remplacée mais non écrite quelque part.
@MEMPE: Oui, c'était aussi important, mais l'erreur d'erreur de l'OPS était due à une erreur de regex. Je vais ajouter une note sur la partie url = code> aussi.
@Keppil Je veux convertir tout le "(" dans la chaîne. En utilisant .replace, je pense que je ne peux convertir que la première occurrence.
@NEERAJ: Non, remplacer () code> prend en charge tous.
Ajout d'un seul Vous devrez utiliser "\)". Le premier La solution à usage général consiste à utiliser \ code> ne fonctionnera pas, car cela essaiera d'évaluer
\ \) code> comme un caractère spécial échappé que ce n'est pas. p>
\ code> échappe la seconde, produisant un "code" normal "> \ code>, qui s'échappe à son tour (code>) code>, produisant une correspondance de regex exactement une paranthèse de fermeture
) code>. p>
motif.Quelle code>
, qui prend une chaîne arbitraire et renvoie une regex qui correspond exactement à cette chaîne. P>
Vous pouvez utiliser RetourLeLL en une fois:
url = url.replaceAll("[()]", ".");
[()] code> correspond à la fois ( code> et ) code>, les crochets n'ont pas besoin d'être échappés à l'intérieur du [] code> groupe. li>
ul> modifier (comme indiqué par @Keppil): p>
Remarque En outre, la chaîne URL code> n'est pas modifiée par le remplacement, il renvoie simplement une nouvelle chaîne Avec les remplacements, vous devez donc le faire: P> url.replaceAll("[()]", ".")
Méthode Aussi vous pouvez remplacer les deux caractères à la fois avec motif regarder String # StringLl code> attend une expression régulière et
( code> ainsi que
) code> sont des caractères spéciaux (marquage du groupe) afin que vous ayez besoin de échappez-leur à être non spécial
url.replaceall ("\\)", "."); code>. P>
url.replaceall ("[()]" ",". "); Code>. Vous pouvez voir que dans ce contexte, les crochets ne sont pas échappés. C'est à cause du contexte de regex - à l'intérieur du
[] code> ils n'ont aucune signification particulière. P>
parce que ) code> est un caractère de regex, vous devez donc vous échapper. Essayez ceci:
Utilisez
url.replaceAll("\\)", ".").replaceAll("\\(", ".");;
) code> doit être échappé avec 2 backslashes. Li>
Donc, le code ressemblerait à ceci: p> xxx pré> et la sortie: p> xxx pré> ol>
Vous pouvez également utiliser org.apache.commons.lang.stringutils.replace (chaîne, chaîne, chaîne) qui n'utilise pas Regex P>
de la bibliothèque Apache Commons http://commons.apache.org/ p>
n'ajoute pas \ . Vous devez ajouter deux doubles esclaves