7
votes

Remplacer tout "(" et ")" dans une chaîne en Java

Comment remplacer tout "(" et ")" dans une chaîne avec un style fluide, en Java? J'ai essayé de la manière suivante: xxx

mais cela ne fonctionne pas. L'erreur est la suivante: xxx

Je pense que ce problème sera également là dans toutes les regex. Ajouter \ avant ) n'a pas fonctionné.


1 commentaires

n'ajoute pas \ . Vous devez ajouter deux doubles esclaves


9 Réponses :


14
votes

Vous devez échapper au '(' et ')' avec "\\ (" et "\\)" respectivement: xxx


2 commentaires

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



8
votes

remplailleL () s'attend à un Regex comme premier paramètre, et les paranthèses ont une signification spéciale là-bas.

Utilisez remplacer () à la place: xxx

Notez que la pièce url = est importante pour enregistrer le résultat du remplacement. Étant donné que string s sont immuables , l'original String n'est pas modifié, mais une nouvelle est créée. Pour conserver le résultat URL doit également pointer sur celui-ci.


4 commentaires

"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 = 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 () prend en charge tous.



1
votes

Ajout d'un seul \ ne fonctionnera pas, car cela essaiera d'évaluer \ \) comme un caractère spécial échappé que ce n'est pas.

Vous devrez utiliser "\)". Le premier \ échappe la seconde, produisant un "code" normal "> \ , qui s'échappe à son tour (code>) , produisant une correspondance de regex exactement une paranthèse de fermeture ) .

La solution à usage général consiste à utiliser motif.Quelle , qui prend une chaîne arbitraire et renvoie une regex qui correspond exactement à cette chaîne.


0 commentaires

17
votes

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("[()]", ".")
    


0 commentaires

0
votes

Méthode String # StringLl attend une expression régulière et ( ainsi que ) sont des caractères spéciaux (marquage du groupe) afin que vous ayez besoin de échappez-leur à être non spécial url.replaceall ("\\)", "."); .

Aussi vous pouvez remplacer les deux caractères à la fois avec motif url.replaceall ("[()]" ",". "); . 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 [] ils n'ont aucune signification particulière.

regarder Javadoc pour plus d'informations.


0 commentaires

0
votes

parce que ) est un caractère de regex, vous devez donc vous échapper. Essayez ceci: xxx


0 commentaires

0
votes

Utilisez

url.replaceAll("\\)", ".").replaceAll("\\(", ".");;


0 commentaires

2
votes
  1. la chaîne est immuable.
  2. ) doit être échappé avec 2 backslashes.

    Donc, le code ressemblerait à ceci: xxx

    et la sortie: xxx


0 commentaires

1
votes

Vous pouvez également utiliser org.apache.commons.lang.stringutils.replace (chaîne, chaîne, chaîne) qui n'utilise pas Regex

de la bibliothèque Apache Commons http://commons.apache.org/


0 commentaires