web-dev-qa-db-fra.com

Obtenez int de String, contenant également des lettres, dans Java

Comment puis-je obtenir la valeur int d'une chaîne telle que 423e - c'est-à-dire une chaîne qui contient un nombre mais aussi peut-être une lettre?

Integer.parseInt() échoue car la chaîne doit être entièrement un nombre.

27
DisgruntledGoat

À moins que vous ne parliez de nombres en base 16 (pour lesquels il existe une méthode d'analyse en hexadécimal), vous devez séparer explicitement la partie qui vous intéresse, puis la convertir. Après tout, quelle serait la sémantique de quelque chose comme 23e44e11d en base 10?

Les expressions régulières pourraient faire l'affaire si vous savez avec certitude que vous n'avez qu'un seul numéro. Java possède un analyseur d'expressions régulières intégré.

Si, d'autre part, votre objectif est de concaténer tous les chiffres et de vider les alphas, cela est assez simple à faire en itérant caractère par caractère pour créer une chaîne avec StringBuilder, puis en analysant celui-ci.

10
Uri

Remplacez tous les non-chiffres par des blancs: la chaîne restante ne contient que des chiffres.

Integer.parseInt(s.replaceAll("[\\D]", ""))

Cela supprimera également les non-chiffres entre les chiffres, donc "x1x1x" devient 11.

Si vous devez confirmer que la chaîne se compose d'une séquence de chiffres (au moins un) éventuellement suivie d'une lettre, utilisez ceci:

s.matches("[\\d]+[A-Za-z]?")
79
polygenelubricants

La classe NumberFormat analysera uniquement la chaîne jusqu'à ce qu'elle atteigne un caractère non analysable:

((Number)NumberFormat.getInstance().parse("123e")).intValue()

retournera donc 123.

20
jarnbjo

Vous pouvez également utiliser le scanner:

Scanner s = new Scanner(MyString);
s.nextInt();
5
Soheil Setayeshi

Parcourez simplement la chaîne, en créant un int comme d'habitude, mais ignorez les caractères non numériques:

int res = 0;
for (int i=0; i < str.length(); i++) {
    char c = s.charAt(i);
    if (c < '0' || c > '9') continue;
    res = res * 10 + (c - '0');
}
4
Claudiu

Peut-être obtenir la taille de la chaîne et parcourir chaque caractère et appeler isDigit () sur chaque caractère. S'il s'agit d'un chiffre, ajoutez-le à une chaîne qui collecte uniquement les chiffres avant d'appeler Integer.parseInt ().

Quelque chose comme:

    String something = "423e";
    int length = something.length();
    String result = "";
    for (int i = 0; i < length; i++) {
        Character character = something.charAt(i);
        if (Character.isDigit(character)) {
            result += character;
        }
    }
    System.out.println("result is: " + result);
2
digiarnie