Dans mon code Java, si une chaîne d'entrée a obtenu l'un des caractères spéciaux mentionnés, il doit être précédé d'être précédé par jeu de caractères spécial est I Mettez les caractères spéciaux dans une matrice de chaîne, itéré dans A pour boucle, vérifié s'il est présent dans la chaîne, si oui, \\ code>
{+, -, &&, ||,!, (,), {,}, [], ^, "", ~, *,?, :, \} code>. J'ai essayé d'utiliser
string.replaceall (ancien, nouveau) code> mais à ma surprise, ce n'est pas opérationnel, même si je donne des valeurs appropriées pour "vieux" et "nouveau". P>
INPUT.RREPLACEALL (":" ":" : ") code>. Mais ça ne me donnait pas la sortie souhaitée. S'il vous plaît aider p>
4 Réponses :
Vous devez utiliser et aussi vous n'avez pas besoin de la dernière affectation: - p> comme, vous n'utilisez pas du tout. Vous êtes en fait attribuant la chaîne modifiée Retour à la recherche aussi, plutôt que d'utiliser OK maintenant, après cette explication string #. / code>
prend un regex code> comme premier paramètre. Donc, votre code échouera si l'entrée de la chaîne est un
méta-caractère code> similaire -
+ code>.
string # # remplacer code>
. p> code>, donc ce n'est pas nécessaire. P>
nouvelle chaîne (...) code> , pour construire votre nouvelle chaîne.
En fait, vous avez juste besoin d'une seule ligne dans votre
if-énoncé code>. P>
Merci rohit. Et l'inverse d'utiliser Remplacer au lieu de remplacer, je dois boucler sur ma chaîne d'entrée, ce qui rend la boucle extérieure et celle-ci la boucle interne droite. Je pensais éviter de itération de la chaîne d'entrée (en pensant aux cas lorsque la longueur de la chaîne d'entrée devient grande!). Il y a aussi des symboles qui ne peuvent pas être échappés avec un seul '\' à droite ... comme pour \ elle-même, nous devons vous échapper comme '\\\\' juste?
@Rohit, je reçois de l'aide de votre part de plus de 4 ans, merci d'avoir été actif!
Une fois que vous avez réalisé que le remplacement prend une regex, c'est juste une question de codage de vos caractères comme une regex.
Essayez ceci: p>
code\:xy
Vous devez également échapper au [ code>.
@Rohitjain non, vous n'avez pas besoin d'échapper au [ code>. Essayer
@Bohemian .. l'a essayé, c'est pourquoi j'ai posté le commentaire. Ça ne fonctionne pas.
@Rohitjain je veux voir cela pour moi-même! Je ne peux pas vérifier maintenant (à l'aide de l'iPhone) mais je vérifierai dès que possible. J'étais sûr que tu ne l'as pas fait, mais je continue d'apprendre des choses ici
@Rohitjain merci Bohemian et Rohit. Lorsque j'ai utilisé cela, cela a donné une exception de classe de caractères non récapitule, alors [doit être échappé non? Également si l'un quelconque du symbole est présent dans ma chaîne qui doit être remplacée par une évasion suivie de ce symbole lui-même, comment atteindre ce modèle. ? Comment obtenir cette valeur de groupe à être annexée avec "\\" en Java. J'ai essayé une entrée comme A * B, mais elle a échoué. Je vais le vérifier à nouveau et vous le ferai savoir
Lorsque j'ai essayé pour un code de chaîne d'entrée: XY Il a échoué à donner stressindexoutofboundsException à String Newsecearch = Search.ReplaceAll ("(? = [- + & |! () ^ \\\] ) "," \\ "); java.lang.stringindexoutofboundsException: index de chaîne hors de portée: 1 à java.lang.string.chardat (string.java:686) à java.util.regex.matcher.AppendReplacement (correspondeur. java: 703) à java.util.regex.matcher.replaceall (correspondeur.java:813) à java.lang.string.replaceall (string.java:2189)
Motif p = motif.comPILE ("(. *) (? = [- + & |! () {} \ [\] ^ \\" ~ *?: \\\\ & # 93;) " ); Matcher M = P.Matcher (Recherche); String S0 = M.Group (0); String S1 = M.Group (1); Chaîne S2 = M.Group (2); MAINTENANT POUR CODE: XY, S0 = Code: xy, s1 = code et s2 =: xy. Donc, j'ai besoin d'obtenir comme ça et devrait annoncer cela avec \\ lors de l'utilisation de remplailleL ()?
@ user1863118 OK j'ai corrigé le problème. Il m'a fallu un certain temps pour réaliser que je devais doter de double-échapper au remplacement i> backslash, c'est-à-dire \\\\ code> voir la réponse modifiée, y compris du code de test pour montrer que c'est Est-ce que i> travaille en fait :)
Séquence d'échappement non valide dans la chaîne JSON '\:'
@Dean puis essayez de supprimer le côlon : code> de la regex.
Essayez d'utiliser le ci-dessous. Veuillez utiliser la méthode de remplacement au lieu de remplacerAll p>
Search = Search.replace (Oldstring, Newstring); P>
Lorsque j'ai essayé le code ci-dessous, il a fonctionné
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,(String) ("\\" + newString)); } }
Essayez cette chaîne - A + B code>.