J'ai une chaîne comme la suivante:Extraire deux chiffres d'une chaîne
« une certaine valeur est 25, mais ne doit pas être plus grand que 12 »
Je veux extraire les deux chiffres de la chaîne.
Les nombres sont des nombres entiers.
Il se peut qu'il n'y ait pas de texte avant le premier chiffre et du texte après le second nombre.
J'ai essayé de le faire avec une expression rationnelle et les groupes, mais a lamentablement échoué:
public MessageParser(String message) {
Pattern stringWith2Numbers = Pattern.compile(".*(\\d?).*(\\d?).*");
Matcher matcher = stringWith2Numbers.matcher(message);
if (!matcher.matches()) {
couldParse = false;
firstNumber = 0;
secondNumber = 0;
} else {
final String firstNumberString = matcher.group(1);
firstNumber = Integer.valueOf(firstNumberString);
final String secondNumberString = matcher.group(2);
secondNumber = Integer.valueOf(secondNumberString);
couldParse = true;
}
}
Toute aide est aprécié.
Est-ce que le ". *" Entre les modèles de nombres "mange" le deuxième nombre? – MartinStettner
Non. Le point d'interrogation venant après l'étoile indique qu'il doit correspondre à la chaîne la plus courte possible - ainsi, il correspondra à tout avant le second nombre. – BlairHippo
... bien que, parce que les clauses à deux chiffres ne sont plus facultatives, le point d'interrogation est moins important - si vous êtes absolument certain qu'il y aura deux et SEULEMENT deux nombres dans la chaîne, vous n'en avez pas besoin. Cela importe s'il y a plus de chiffres, cependant. En utilisant "1 et 2 et 3" comme un exemple de chaîne: avec le point d'interrogation, vous obtenez 1 et 2 pêché. Sans, 1 et 3 seraient les deux valeurs extraites. – BlairHippo