1055 Stimmen

Wie prüft man in Java, ob ein String numerisch ist?

Wie würden Sie prüfen, ob ein String eine Zahl ist, bevor Sie ihn parsen?

42 Stimmen

Alle Lösungen, die mit regulären Ausdrücken vorgeschlagen werden, funktionieren nicht für hexadezimale Zahlen.

0 Stimmen

Und die Übergabe einer Null-Zeichenkette in der Funktion matches(...) führt zur Ausnahme NullPointer.

0 Stimmen

In der Antwort von Max Malysh finden Sie eine prägnante Java 8-Lösung ohne Bibliotheken von Drittanbietern.

1voto

jqno Punkte 14613

Ich denke, die einzige Möglichkeit, zuverlässig festzustellen, ob eine Zeichenkette eine Zahl ist, besteht darin, sie zu parsen. Also würde ich sie einfach parsen, und wenn es eine Zahl ist, erhalten Sie die Zahl in einem int kostenlos!

0voto

jenifer Punkte 25
String text="hello 123";
if(Pattern.matches([0-9]+))==true
System.out.println("String"+text);

0voto

Tạ Anh Tú Punkte 138

Wenn ihr die folgende Methode zur Überprüfung verwendet:

public static boolean isNumeric(String str) {
    NumberFormat formatter = NumberFormat.getInstance();
    ParsePosition pos = new ParsePosition(0);
    formatter.parse(str, pos);
    return str.length() == pos.getIndex();
}

Dann was happend mit der Eingabe von sehr langen String, wie ich diese Methode aufrufen:

System.out.println(isNumeric("94328948243242352525243242524243425452342343948923"));

Das Ergebnis ist "wahr", außerdem ist es eine zu große Zahl! Dasselbe wird passieren, wenn Sie eine Regex zur Überprüfung verwenden! Ich würde also lieber die "Parsing"-Methode zur Überprüfung verwenden, etwa so:

public static boolean isNumeric(String str) {
    try {
        int number = Integer.parseInt(str);
        return true;
    } catch (Exception e) {
        return false;
    }
}

Und das Ergebnis ist das, was ich erwartet habe!

1 Stimmen

"es ist eine zu große Nummer" So etwas wie eine "zu große Zahl" gibt es nicht. Zahlen sind unendlich. 7645 ist eine Zahl und 92847294729492875982452012471041141990140811894142729051 ist auch eine Zahl. Die erste kann als eine Integer und die zweite kann dargestellt werden als BigDecimal . Und selbst wenn sie nicht als Objekt in Java dargestellt werden könnten, sind sie immer noch Zahlen - und genau das ist die Frage, die gestellt wird.

0 Stimmen

Außerdem sollten Sie Ausnahmen nicht missbrauchen. Java ist nicht Python. Verwenden Sie zumindest spezifischere NumberFormatException

0voto

Rohit Nishad Punkte 19
private static Pattern p = Pattern.compile("^[0-9]*$");

public static boolean isNumeric(String strNum) {
    if (strNum == null) {
        return false;
    }
    return p.matcher(strNum).find();
}

2 Stimmen

Mit diesem Code kann die Frage zwar gelöst werden, einschließlich einer Erklärung wie und warum dies das Problem löst, würde wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr "Up-Votes" führen. Denken Sie daran, dass Sie die Frage für künftige Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte editar fügen Sie Ihrer Antwort Erklärungen hinzu und geben Sie an, welche Einschränkungen und Annahmen gelten.

-2voto

PAA Punkte 8724
import java.util.Scanner;

public class TestDemo {
    public static void main(String[] args) {
        boolean flag = true;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the String:");
        String str = sc.nextLine();

        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) > 48 && str.charAt(i) < 58) {
                flag = false;
                break;
            }
        }

        if(flag == true) {
            System.out.println("String is a valid String.");
        } else {
            System.out.println("String contains number.");
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X