Cum să verificați dacă un șir de caractere este numeric? [duplicat] (Programare, Java)

user1944277 a intrebat.

Am un program gpa, și funcționează cu equalsIgnoreCase() metoda care compară două șiruri de caractere, litera „a” la intrarea utilizatorului, care verifică dacă a pus „a” sau nu. Dar acum vreau să adaug o excepție cu un mesaj de eroare care se execută când la intrare este un număr. Vreau ca programul să-și dea seama că numărul întreg introdus nu este același lucru cu șirul de caractere și să dea un mesaj de eroare. Ce metode pot folosi pentru a compara un tip String la o variabilă de tip String cu o intrare de tip int, și să arunc o excepție?

Comentarii

  • Pattern.compile("[0-9]+").matches(string), poate? –  > Por Louis Wasserman.
  • Deci, doriți să potriviți doar numere întregi sau orice număr? –  > Por arshajii.
  • nu vreau să introducă niciun număr, doar șiruri de caractere –  > Por user1944277.
11 răspunsuri
Karthik T

Multe opțiuni explorate la http://www.coderanch.com/t/405258/java/java/String-IsNumeric

Unul mai mult este

public boolean isNumeric(String s) {  
    return s != null && s.matches("[-+]?\d*\.?\d+");  
}  

S-ar putea fi exagerat, dar Apache Commons NumberUtils pare să aibă și el câteva ajutoare.

Comentarii

  • Aș schimba ultimul „+” cu un „*”, astfel încât 123. să devină o intrare validă (nimic după delimitatorul zecimal nu este o intrare validă) –  > Por peterh.
  • Aș adăuga o verificare pentru NULL … altfel se va bloca –  > Por Stefan Michev.
  • @StefanMichev oamenii ar trebui să nu mai treacă argumente cu null. Nu este corect ca fiecare metodă din lume să aibă o verificare null, empty sau orice altceva. –  > Por Buffalo.
  • Acesta este un cod ușor, dar milioane de programatori Java trebuie să îl scrie. Ar trebui să fie în acea bibliotecă standard. –  > Por Yetti99.
Oh Chin Boon

Dacă vi se permite să folosiți biblioteci terțe, sugerați următoarele.

https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/math/NumberUtils.html

NumberUtils.isDigits(str:String):boolean
NumberUtils.isNumber(str:String):boolean

Comentarii

  • Nu aveți nevoie de nimic de la terți: loop: if(Character.isDigit(c)) – –  > Por Roger F. Gay.
  • Atenție! isNumeric și isDigits abordează doar numere pure. adică, vor returna false pentru 7,574. (numere separate prin virgulă). –  > Por Kashif Nazar.
  • isNumber(str:String) este Depreciat –  > Por Federico Traiman.
NPKR

Utilizați acest lucru

public static boolean isNum(String strNum) {
    boolean ret = true;
    try {

        Double.parseDouble(strNum);

    }catch (NumberFormatException e) {
        ret = false;
    }
    return ret;
}

Comentarii

  • încercați să prindeți și alte excepții 🙂 dacă ați trimis un Null un șir de obiecte, acest lucru eșuează –  > Por prime.
Rudi

Comentarii

  • Nu te-am votat, dar nu trebuie să adaugi mai multe programe. În Java SE: Bucla: if(Character.isDigit(c)) –  > Por Roger F. Gay.
  • Atenție! isNumeric abordează numai numere pure. adică, va returna fals pentru 7.574. (numere separate prin virgulă). –  > Por Kashif Nazar.
  • De ce returnează true pentru semnele de întrebare? commons.apache.org/proper/commons-lang/apidocs/org/apache/… –  > Por pete.
Jayamohan

Utilizați metoda de mai jos,

public static boolean isNumeric(String str)  
{  
  try  
  {  
    double d = Double.parseDouble(str);  
  }  
  catch(NumberFormatException nfe)  
  {  
    return false;  
  }  
  return true;  
}

Dacă doriți să folosiți expresia regulată, puteți folosi metoda de mai jos,

public static boolean isNumeric(String str)
{
  return str.matches("-?\d+(\.\d+)?");  //match a number with optional '-' and decimal.
}

Comentarii

  • Încercați și capturarea unei expresii are o astfel de cheltuieli generale uriașe, totuși. –  > Por WorldSEnder.
  • Codificarea prin excepție este un anti-pattern cunoscut. A se vedea en.wikipedia.org/wiki/Coding_by_exception și softwareengineering.stackexchange.com/questions/189222/… –  > Por mcalmeida.
  • Metoda de utilizare a Double.parseDouble() nu este acceptabilă pentru situațiile de codare internaționalizată. Va funcționa rezonabil de bine în SUA, dar șirurile de numere cu duble valabile în alte țări nu vor fi neapărat corect analizate. De exemplu, în unele localități, separatorul de mii poate fi un spațiu ” „, iar „123 456” va provoca o excepție NumberFormatException, chiar dacă este un număr parseabil. –  > Por Kenny Wyland.
Alberto Cerqueira

Metodă simplă:

public boolean isBlank(String value) {
    return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}


public boolean isOnlyNumber(String value) {
    boolean ret = false;
    if (!isBlank(value)) {
        ret = value.matches("^[0-9]+$");
    }
    return ret;
}

Nadalet
public static boolean isNumeric(String string) {
    if (string == null || string.isEmpty()) {
        return false;
    }
    int i = 0;
    int stringLength = string.length();
    if (string.charAt(0) == '-') {
        if (stringLength > 1) {
            i++;
        } else {
            return false;
        }
    }
    if (!Character.isDigit(string.charAt(i))
            || !Character.isDigit(string.charAt(stringLength - 1))) {
        return false;
    }
    i++;
    stringLength--;
    if (i >= stringLength) {
        return true;
    }
    for (; i < stringLength; i++) {
        if (!Character.isDigit(string.charAt(i))
                && string.charAt(i) != '.') {
            return false;
        }
    }
    return true;
}

Georg M.

Am scris această mică metodă în ultimul timp în programul meu pentru a putea verifica dacă un șir de caractere este numeric sau cel puțin fiecare caracter este un număr.

private boolean isNumber(String text){
    if(text != null || !text.equals("")) {
        char[] characters = text.toCharArray();
        for (int i = 0; i < text.length(); i++) {
            if (characters[i] < 48 || characters[i] > 57)
                return false;
        }
    }
    return true;
}

Mulalo Madida

Puteți folosi metoda Character.isDigit(char ch) sau puteți folosi și expresia regulată.

Mai jos este fragmentul:

public class CheckDigit {

private static Scanner input;

public static void main(String[] args) {

    System.out.print("Enter a String:");
    input = new Scanner(System.in);
    String str = input.nextLine();

    if (CheckString(str)) {
        System.out.println(str + " is numeric");
    } else {
        System.out.println(str +" is not numeric");
    }
}

public static boolean CheckString(String str) {
    for (char c : str.toCharArray()) {
        if (!Character.isDigit(c))
            return false;
    }
    return true;
}

}

Bohemian

Iată cum se verifică dacă intrarea conține o cifră:

if (input.matches(".*\d.*")) {
    // there's a digit somewhere in the input string 
}

Comentarii

  • hei, mulțumesc, asta a ajutat, dar programul meu se termină după ce se aruncă excepția. dacă scot excepția, rulează perfect…exact cum am cerut, chiar dacă există un număr. vreo idee despre cum să continui să funcționeze programul după ce am aruncat excepția –  > Por user1944277.
  • Înfășurați codul care aruncă ex rația într-un try-catch, prinzând excepția aruncată. –  > Por Bohemian.
  • Am încercat deja doar să înfășor întreaga mea parte a codului care solicită intrări într-un try catch, dar nu a funcționat, poate u clarifica folosind codul meu postat mai sus – –  > Por utilizator1944277.
  • Ce cod postat unde? Nu pot vedea niciun cod. –  > Por Bohemian.
Roger F. Gay

Pentru a verifica toate caracterele int, puteți folosi pur și simplu o dublă negație. if (!searchString.matches(„[^0-9]+$”)) …

[^0-9]+$ verifică dacă există caractere care nu sunt numere întregi, astfel încât testul eșuează dacă este adevărat. Dacă NU este așa, veți obține true la succes.

Tags: