web-dev-qa-db-fra.com

Extraire une partie entière en chaîne

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?

18
Verhogen

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).

8
Crowe T. Robot

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à.

28
Ascalonian

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

24
Brian Hasden

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.");
    }
}
4
Michael Easter

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());
    }
}
4
ecto

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);
3
hackrush
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]);
} 
0
amir ansari