Remplacer le caractère spécial avec une évasion précédé caractère spécial dans Java
Dans mon code java, si une chaîne de caractères d'entrée a obtenu l'un des caractères spéciaux mentionnés, qui devrait obtenir précédée par \\
Spécial jeu de caractères est {+, -, &&, ||, !, (, ), {, },[, ], ^, "", ~, *, ?, :, \}
. J'ai essayé d'utiliser String.replaceAll(old,new)
mais à ma grande surprise sa ne fonctionne pas, même si je suis en train de valeurs propres pour les "anciens" et "nouveaux".
if old=":",new="\:"
J'ai mis les caractères spéciaux dans une Chaîne de tableau, réitéré dans une boucle for, vérifier si elle est présente dans la chaîne, si oui, input.replaceAll(":","\\:")
. Mais sa ne me donne pas le résultat attendu. S'il vous plaît aider
String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}",
"[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };
for (int i = 0; i < arr.length; i++) {
//'search' is my input string
if (search.contains((String) arr[i])) {
String oldString = (String) arr[i];
String newString = new String("\\" + arr[i]);
search = search.replaceAll(oldString, newString);
String newSearch = new String(search.replaceAll(arr[i],
newString));
}
}
OriginalL'auteur Cheese | 2012-12-04
Vous devez vous connecter pour publier un commentaire.
Une fois que vous vous rendez compte replaceAll prend une regex, c'est juste une question de codage de vos caractères, comme une expression régulière.
Essayez ceci:
Que dément regex est un "look ahead" - non capture affirmation que la suite de char correspondre à quelque chose - dans ce cas, un caractère de classe.
Remarquez que vous n'avez pas besoin d'échapper les caractères dans une classe de caractères, à l'exception d'un
]
(même le moins n'ont pas besoin de s'échapper si la première ou la dernière).La
\\\\
est de savoir comment vous code une regex littérale\
(échapper une fois pour java, une fois pour regex)Voici un test de ce travail:
De sortie:
[
.non, vous n'avez pas besoin d'échapper
[
. L'essayerIl a essayé, c'est pourquoi j'ai posté le commentaire. Il ne fonctionne pas.
Je veux voir par moi-même! Je ne peux pas vérifier maintenant (à l'aide de l'iPhone), mais va vérifier dès que possible. J'étais sûr que vous n'avez pas, mais je continue toujours à apprendre des trucs ici
Merci de Bohème et de Rohit. Lorsque j'ai utilisé ce qu'il a donné un ouvert de classe de personnage d'exception, donc [ doivent être échappés à droite?Aussi, si un symbole est présent dans ma chaîne de caractères qui doit être remplacé par une évasion suivie par le symbole lui-même, la manière d'y parvenir à l'aide de ce modèle?Comment obtenir que groupe de valeur jointe avec "\\" en java. J'ai essayé pour une entrée de type a*b, mais il a échoué. Je vais vérifier à nouveau et vous permettra de savoir
OriginalL'auteur Bohemian
String#replaceAll
prend unregex
comme premier paramètre. Ainsi, votre code ne fonctionnera pas si l'entrée dans la chaîne est unmeta-character
comme -+
.Vous devez utiliser
String#remplacez
.Et aussi, vous n'avez pas besoin de la dernière mission: -
Comme vous ne l'utilisez pas. Vous êtes, en fait, l'attribution de la modification de la chaîne de retour à
search
, de sorte qu'il n'est pas nécessaire.Aussi, plutôt que d'utiliser
new String(...)
, à la construction de votre chaîne.En fait, vous avez juste besoin d'une seule ligne dans votre
if-statement
.Ok maintenant, après que explication, vous pouvez maintenant utiliser le dessous
for-loop
: -obtiens de l'aide auprès de vous plus de 4 ans, merci d'être actif helper!
OriginalL'auteur Rohit Jain
Essayez d'utiliser le ci-dessous. Veuillez utiliser la méthode replace au lieu de ReplaceAll
search = recherche.remplacer(oldString, newString);
OriginalL'auteur Kaliappan
quand j'ai essayé le code ci-dessous, il a travaillé
a+b
.Oui, il ne parvient pas pour de nombreux cas!
OriginalL'auteur Cheese