Regex pour trouver un entier au sein d'une chaîne
Je voudrais utiliser des regex avec Java.
Ce que je veux faire est de trouver le premier entier en une chaîne de caractères.
Exemple:
String = "the 14 dogs ate 12 bones"
Serait de retour 14.
String = "djakld;asjl14ajdka;sdj"
Serait également de retour 14.
C'est ce que j'ai jusqu'à présent.
Pattern intsOnly = Pattern.compile("\\d*");
Matcher makeMatch = intsOnly.matcher("dadsad14 dssaf jfdkasl;fj");
makeMatch.find();
String inputInt = makeMatch.group();
System.out.println(inputInt);
Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
Vous allez avoir 0 ou plusieurs chiffres. Vous devez vous poser pour 1 ou plus:
Il semble comme les autres solutions ont échoué à poignée
+/-
et des cas comme2e3
, quijava.lang.Integer.parseInt(String)
prend en charge, donc je vais prendre mon go sur le problème. Je suis un peu inexpérimenté à regex, donc j'ai peut-être fait quelques erreurs, utilisé quelque chose que Java regex analyseur ne prend pas en charge, ou il fait trop compliqué, mais les états semblent travailler dans Kiki 0.5.6.Toutes les expressions régulières sont fournis dans les deux non échappés de format pour la lecture, et un format d'échappement que vous pouvez utiliser comme un littéral de chaîne en Java.
Pour obtenir un byte, short, int, long ou à partir d'une chaîne:
...et pour les points de bonus...
Pour obtenir un double ou float à partir d'une chaîne:
099
est converti à 99 parInteger.parseInt()
, voir: pastie.org/1881188Heres une pratique que j'ai fait pour le C# avec les génériques. Il permettra de match en fonction de votre expression régulière et retourner les types dont vous avez besoin:
alors si vous voulais récupérer uniquement les chiffres et de les renvoyer dans une string[] tableau:
Espérons que cela est utile à quelqu'un...
En plus de ce PiPeep dit, si vous essayez de faire correspondre des nombres entiers à l'intérieur d'une expression, de sorte que
1 + 2 - 3
ne correspondent1
,2
, et3
, plutôt que de1
,+ 2
et- 3
, vous avez réellement besoin d'un lookbehind déclaration, et la partie que vous voulez réellement être retourné parMatcher.group(2)
plutôt que de simplementMatcher.group()
.Également, pour des choses comme
someNumber - 3
, oùsomeNumber
est un nom de variable ou quelque chose comme ça, vous pouvez utiliserMême si bien sûr, qui ne fonctionneront pas si vous êtes de l'analyse d'une chaîne de caractères comme
The net change to blahblah was +4
la java spec donne réellement de ce monstre d'une regex pour l'analyse en double.
cependant, il est considéré comme une mauvaise pratique, tout en essayant d'analyser le type et la capture de l'erreur, a tendance à être un peu plus lisible.
Utiliser l'un d'eux:
ou