it-swarm.com.de

Extrahiere einen ganzzahligen Teil in String

Was ist der beste Weg, um den ganzzahligen Teil einer Zeichenfolge zu extrahieren?

Hello123

Wie bekommst du den 123-Teil? Sie können es irgendwie mit dem Scanner von Java hacken. Gibt es einen besseren Weg?

18
Verhogen

Warum verwenden Sie nicht einfach einen regulären Ausdruck, um den gewünschten Teil der Zeichenfolge abzugleichen?

[0-9]

Das ist alles, was Sie brauchen, und was auch immer die umgebenden Zeichen benötigt.

Unter http://www.regular-expressions.info/tutorial.html erfahren Sie, wie reguläre Ausdrücke funktionieren.

Edit: Ich möchte sagen, dass Regex für dieses Beispiel ein wenig übertrieben ist, wenn der Code, den der andere Antragsteller gepostet hat, funktioniert ... aber ich würde trotzdem empfehlen, Regex allgemein zu erlernen, denn sie sind sehr mächtig und wird sich als nützlich erweisen, als ich zugeben möchte (nachdem ich einige Jahre gewartet habe, bevor sie einen Schuss geben).

8
Crowe T. Robot

Versuchen Sie, wie bereits erläutert, reguläre Ausdrücke zu verwenden. Das sollte helfen:

String value = "Hello123";
String intValue = value.replaceAll("[^0-9]", ""); // returns 123

Und dann konvertieren Sie das einfach von dort in ein int (oder Integer).

28
Ascalonian

Ich glaube, du kannst so etwas tun:

Scanner in = new Scanner("Hello123").useDelimiter("[^0-9]+");
int integer = in.nextInt();

BEARBEITEN: UseDelimiter-Vorschlag von Carlos hinzugefügt

24
Brian Hasden

Angenommen, Sie möchten eine abschließende Ziffer, würde dies funktionieren:

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

Ich hatte gedacht, Michaels Regex war die einfachste mögliche Lösung, aber auf den zweiten Gedanken funktioniert "\ d +" einfach, wenn Sie Matcher.find () anstelle von Matcher.matches () verwenden:

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

Ich weiß zwar, dass es sich um eine 6-jährige Frage handelt, aber ich poste eine Antwort für diejenigen, die es vermeiden möchten, Regex jetzt zu lernen (was Sie übrigens sollten). Dieser Ansatz gibt auch die Nummer zwischen den Ziffern an (z. B. HP 123 KT 567 gibt 123567 zurück)

    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