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?

Était-ce utile?

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]);
} 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top