Frage

Was ist der beste Weg, um den ganzzahligen Teil einer Schnur wie zu extrahieren

Hello123

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

War es hilfreich?

Lösung

Warum verwenden Sie nicht einfach einen regulären Ausdruck, der dem Teil der gewünschten Saite entspricht?

[0-9]

Das ist alles, was Sie brauchen, und die umliegenden Güte, die sie benötigt.

Ansehen http://www.regular-expressions.info/tutorial.html zu verstehen, wie reguläre Ausdrücke funktionieren.

EDIT: Ich möchte sagen, dass Regex für dieses Beispiel ein wenig über Bord sein kann, wenn der Code, den der andere Sentner gepostet hat Ich werde mehr als nützlich sein, als ich zugeben möchte (nachdem ich einige Jahre gewartet hatte, bevor ich sie versuchte).

Andere Tipps

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

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

Und dann konvertierst du das einfach von dort in eine INT (oder Ganzzahl).

Ich glaube, Sie können so etwas wie:

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

Bearbeiten: Us Usedelimiter Vorschlag von Carlos hinzugefügt

Angenommen, Sie möchten eine nachfolgende 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.");
    }
}

Ich hatte gedacht, Michaels Regex sei die einfachste Lösung, aber nach dem zweiten Gedanke " d+" funktioniert, 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());
    }
}

Obwohl ich weiß, dass es sich um eine 6 -jährige Frage handelt, veröffentliche ich eine Antwort für diejenigen, die momentan das Erlernen von Regex vermeiden möchten (was Sie übrigens übrigens). Dieser Ansatz gibt auch die Zahl zwischen den Ziffern (für HP123Kt567 wird 123567 zurückkehren)

    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]);
} 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top