Quel est le meilleur moyen d’extraire la partie entière d’une chaîne comme
Hello123
Comment obtenez-vous la partie 123. Vous pouvez en quelque sorte la pirater à l'aide du scanner de Java. Existe-t-il un meilleur moyen?
Pourquoi n'utilisez-vous pas simplement une expression régulière pour faire correspondre la partie de la chaîne souhaitée?
[0-9]
C'est tout ce dont vous avez besoin, plus tout ce qui entoure les personnages requis.
Regardez http://www.regular-expressions.info/tutorial.html pour comprendre le fonctionnement des expressions régulières.
Edit: J'aimerais dire que Regex est peut-être un peu trop à la mer pour cet exemple, si le code que l'autre auteur a publié fonctionne ... sera plus pratique que je ne voudrais l'admettre (après avoir attendu plusieurs années avant de leur donner une chance).
Comme expliqué précédemment, essayez d’utiliser des expressions régulières. Cela devrait aider:
String value = "Hello123";
String intValue = value.replaceAll("[^0-9]", ""); // returns 123
Et ensuite, vous convertissez simplement cela en int (ou Integer) à partir de là.
Je crois que vous pouvez faire quelque chose comme:
Scanner in = new Scanner("Hello123").useDelimiter("[^0-9]+");
int integer = in.nextInt();
EDIT: Ajout de la suggestion useDelimiter de Carlos
En supposant que vous vouliez un dernier chiffre, ceci fonctionnerait:
import Java.util.regex.*;
public class Example {
public static void main(String[] args) {
Pattern regex = Pattern.compile("\\D*(\\d*)");
String input = "Hello123";
Matcher matcher = regex.matcher(input);
if (matcher.matches() && matcher.groupCount() == 1) {
String digitStr = matcher.group(1);
Integer digit = Integer.parseInt(digitStr);
System.out.println(digit);
}
System.out.println("done.");
}
}
Je pensais que l'expression rationnelle de Michael était la solution la plus simple possible, mais à la réflexion, "\ d +" fonctionne si vous utilisez Matcher.find () au lieu de Matcher.matches ():
import Java.util.regex.Pattern;
import Java.util.regex.Matcher;
public class Example {
public static void main(String[] args) {
String input = "Hello123";
int output = extractInt(input);
System.out.println("input [" + input + "], output [" + output + "]");
}
//
// Parses first group of consecutive digits found into an int.
//
public static int extractInt(String str) {
Matcher matcher = Pattern.compile("\\d+").matcher(str);
if (!matcher.find())
throw new NumberFormatException("For input string [" + str + "]");
return Integer.parseInt(matcher.group());
}
}
Bien que je sache que c'est une question de 6 ans, mais je poste une réponse pour ceux qui veulent éviter d'apprendre regex maintenant (que vous devriez d'ailleurs). Cette approche donne également le nombre entre les chiffres (par exemple. HP 123 KT 567 renverra 123567)
Scanner scan = new Scanner(new InputStreamReader(System.in));
System.out.print("Enter alphaNumeric: ");
String x = scan.next();
String numStr = "";
int num;
for (int i = 0; i < x.length(); i++) {
char charCheck = x.charAt(i);
if(Character.isDigit(charCheck)) {
numStr += charCheck;
}
}
num = Integer.parseInt(numStr);
System.out.println("The extracted number is: " + num);
String[] parts = s.split("\\D+"); //s is string containing integers
int[] a;
a = new int[parts.length];
for(int i=0; i<parts.length; i++){
a[i]= Integer.parseInt(parts[i]);
System.out.println(a[i]);
}