Extrait de la partie entière dans la chaîne
-
19-09-2019 - |
Question
Quelle est la meilleure façon d'extraire la partie entière d'une chaîne comme
Hello123
Comment obtenez-vous la partie 123. Vous pouvez pirater sorte de scanner à l'aide de Java, est-il une meilleure façon?
La solution
Pourquoi ne pas simplement utiliser une expression régulière pour correspondre à la partie de la chaîne que vous voulez?
[0-9]
C'est tout ce dont vous avez besoin, plus tout ce qui l'entoure nécessite caractères.
Regardez http://www.regular-expressions.info/tutorial.html pour comprendre comment les expressions régulières de travail.
Edit: Je voudrais dire que Regex peut être un peu trop loin pour cet exemple, si en effet le code que l'autre Déposant a posté des œuvres ... mais je vous recommande encore l'apprentissage en général Regex de, car ils sont très puissant et sera utile plus que je voudrais admettre (après avoir attendu plusieurs années avant de leur donner un coup de feu).
Autres conseils
Comme expliqué précédemment, essayez d'utiliser les expressions régulières. Cela devrait aider:
String value = "Hello123";
String intValue = value.replaceAll("[^0-9]", ""); // returns 123
Et puis vous convertissez juste que pour un entier (ou entier) à 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 suggestion useDelimiter par Carlos
En supposant que vous voulez un chiffre de fuite, cela 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.");
}
}
J'avais pensé regex de Michael était la solution la plus simple possible, mais à la réflexion juste "\ 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 suis annonce une réponse pour ceux qui veulent éviter d'apprendre regex en ce moment (qui devrait vous BTW). Cette approche donne aussi le nombre entre les chiffres (par ex. HP 123 KT 567 retournera 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]);
}