En balançant les méta-caractères
Je reçois un message d'erreur sur balançant méta caractère lorsque j'utilise '+', '*', '(', et ')'.
J'ai déjà essayé de se soustraire à ces caractères dans la regex, mais j'ai toujours l'erreur. C'est ce que j'ai:
"[-\\+\\*/%\\(\\)]"
Mise à jour:
test:
String input = "+";
String vals = new WNScanner(input).getNextToken(); //**********
System.out.println("token: " + vals);
System.out.println(vals.matches("[-+*/%()]"));
d'une autre classe:
...
String expression = input;
...
public String getNextToken() {
String[] token = {""};
if (expression.length() == 0)
return "";
token = expression.split("\\s");
recentToken = token[0];
expression = expression.replaceFirst(token[0], ""); //*************
expression = expression.trim();
return token[0];
}
* il y a des exceptions à ces lignes.
Aucun de ceux qui nécessitent l'échappement barre oblique inverse dans les "[]"s (cependant, "-" doit être le premier caractère à l'intérieur de l'" []").
oh. mais j'ai toujours l'erreur si je ne comprend pas les barres obliques inverses. une idée?
Postez votre tentative (code) avec le message d'erreur dans la question (vous pouvez tape vers le bas d'une simple classe ou d'une fonction unique).
J'ai mis à jour mon post. J'espère que c'est clair
Qu'est-ce que l'entrée? Qu'est-ce que l'expression? pourquoi ne pas getNextToken retourner quelque chose?
oh. mais j'ai toujours l'erreur si je ne comprend pas les barres obliques inverses. une idée?
Postez votre tentative (code) avec le message d'erreur dans la question (vous pouvez tape vers le bas d'une simple classe ou d'une fonction unique).
J'ai mis à jour mon post. J'espère que c'est clair
Qu'est-ce que l'entrée? Qu'est-ce que l'expression? pourquoi ne pas getNextToken retourner quelque chose?
OriginalL'auteur user2430361 | 2013-06-04
Vous devez vous connecter pour publier un commentaire.
OK, je ne sais pas ce que vous voulez atteindre là... Surtout à cette ligne:
Si la chaîne d'entrée est
"+"
, puis l'ensemble de votre regex est+
. Et qui n'est pas légal.Vous besoin de citer de la chaîne d'entrée afin de l'utiliser dans tous les regex liées à l'opération, et qui comprend
String
's.replaceFirst()
et.replaceAll()
(mais pas.replace()
...).Par conséquent, n':
Pattern
est le JDK de la classe de base pour les regex de traitement. Vous créez un objet regex par l'appel de la statique méthode de fabriquePattern.compile()
. Une autre méthode statique de cette classe est la méthode utilisée ici,.quote()
, ce qui, étant donné unString
que d'une entrée, de citer tous les métacaractères en sorte que d'une regex créés à partir de cette chaîne est automatiquement valide. javadoc pourPattern
ici. Remarque: n'oubliez pas d'accepter la réponse 😉OriginalL'auteur fge