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.

4voto

Yu Wai Hlaing Punkte 131

Sie können das Objekt java.util.Scanner verwenden.

public static boolean isNumeric(String inputData) {
      Scanner sc = new Scanner(inputData);
      return sc.hasNextInt();
    }

3voto

JWCompDev Punkte 425

Basierend auf anderen Antworten habe ich meine eigene geschrieben und es verwendet keine Muster oder Parsing mit Ausnahmeprüfung.

Es wird geprüft, ob maximal ein Minuszeichen und maximal ein Dezimalpunkt vorhanden sind.

Hier sind einige Beispiele und ihre Ergebnisse:

"1", "-1", "-1,5" und "-1,556" ergeben true

"1..5", "1A.5", "1.5D", "-" und "--1" ergeben false

Hinweis: Bei Bedarf können Sie dies ändern, um einen Locale-Parameter zu akzeptieren und diesen in die DecimalFormatSymbols.getInstance()-Aufrufe zu übergeben, um ein bestimmtes Locale anstelle des aktuellen zu verwenden.

 public static boolean isNumeric(final String input) {
    //Check for null or blank string
    if(input == null || input.isBlank()) return false;

    //Retrieve the minus sign and decimal separator characters from the current Locale
    final var localeMinusSign = DecimalFormatSymbols.getInstance().getMinusSign();
    final var localeDecimalSeparator = DecimalFormatSymbols.getInstance().getDecimalSeparator();

    //Check if first character is a minus sign
    final var isNegative = input.charAt(0) == localeMinusSign;
    //Check if string is not just a minus sign
    if (isNegative && input.length() == 1) return false;

    var isDecimalSeparatorFound = false;

    //If the string has a minus sign ignore the first character
    final var startCharIndex = isNegative ? 1 : 0;

    //Check if each character is a number or a decimal separator
    //and make sure string only has a maximum of one decimal separator
    for (var i = startCharIndex; i < input.length(); i++) {
        if(!Character.isDigit(input.charAt(i))) {
            if(input.charAt(i) == localeDecimalSeparator && !isDecimalSeparatorFound) {
                isDecimalSeparatorFound = true;
            } else return false;
        }
    }
    return true;
}

3voto

ARIJIT Punkte 676

Dies ist ein einfaches Beispiel für diese Prüfung:

public static boolean isNumericString(String input) {
    boolean result = false;

    if(input != null && input.length() > 0) {
        char[] charArray = input.toCharArray();

        for(char c : charArray) {
            if(c >= '0' && c <= '9') {
                // it is a digit
                result = true;
            } else {
                result = false;
                break;
            }
        }
    }

    return result;
}

3voto

Elye M. Punkte 2547
// only int
public static boolean isNumber(int num) 
{
    return (num >= 48 && c <= 57); // 0 - 9
}

// is type of number including . - e E 
public static boolean isNumber(String s) 
{
    boolean isNumber = true;
    for(int i = 0; i < s.length() && isNumber; i++) 
    {
        char c = s.charAt(i);
        isNumber = isNumber & (
            (c >= '0' && c <= '9') || (c == '.') || (c == 'e') || (c == 'E') || (c == '')
        );
    }
    return isInteger;
}

// is type of number 
public static boolean isInteger(String s) 
{
    boolean isInteger = true;
    for(int i = 0; i < s.length() && isInteger; i++) 
    {
        char c = s.charAt(i);
        isInteger = isInteger & ((c >= '0' && c <= '9'));
    }
    return isInteger;
}

public static boolean isNumeric(String s) 
{
    try
    {
        Double.parseDouble(s);
        return true;
    }
    catch (Exception e) 
    {
        return false;
    }
}

2voto

gha.st Punkte 10617

Parsen Sie es (d.h. mit Integer#parseInt ) und fangen die Ausnahme einfach ab =)

Zur Klarstellung: Die Funktion parseInt prüft, ob sie die Zahl in jedem Fall analysieren kann (natürlich), und wenn Sie sie trotzdem analysieren wollen, werden Sie keine Leistungseinbußen erleiden, indem Sie das Parsing tatsächlich durchführen.

Wenn Sie es nicht (oder nur sehr, sehr selten) analysieren möchten, können Sie es natürlich auch anders machen.

2 Stimmen

Kostspielig bei extensiver Nutzung

0 Stimmen

Es würde ein Sonar-Problem verursachen, wenn Sie die Ausnahme nicht protokollieren.

0 Stimmen

Double.parseDouble

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