2013-01-08 14 views
40

Mam program gpa i działa on w metodzie equalsIgnoreCase(), która porównuje dwa ciągi, literę "a" z danymi wejściowymi użytkownika, która sprawdza, czy wstawiono "a" czy nie. Ale teraz chcę dodać wyjątek z komunikatem o błędzie, który jest wykonywany, gdy numer jest wejściem. Chcę, aby program zdał sobie sprawę, że wejście integer nie jest tym samym, co ciąg znaków i wyświetla komunikat o błędzie. Które metody można użyć do porównania zmiennej typu String do wejścia typu int i wyrzucić wyjątek?Jak sprawdzić, czy ciąg jest numeryczny?

+6

'Pattern.compile ("[0-9] +") zapałki (string)', może? –

+0

Więc chcesz dopasować * tylko * liczby całkowite lub dowolną liczbę? – arshajii

+0

Nie chcę, żeby wprowadzano w ogóle liczby, tylko ciąg – user1944277

Odpowiedz

5

Wpisz poniżej metodzie

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

Jeśli chcesz użyć wyrażeń regularnych można użyć jako poniżej

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

Spróbuj - a złapanie ekwipunku ma tak ogromne obciążenie. – WorldSEnder

+0

Kodowanie według wyjątku jest znanym wzorcem. Zobacz https://en.wikipedia.org/wiki/Coding_by_exception i https://softwareengineering.stackexchange.com/questions/189222/are-exceptions-as-control-flow-considered-a-serious-antipattern-if -to-why – mcalmeida

61

Wiele opcji zbadane na http://www.coderanch.com/t/405258/java/java/String-IsNumeric

Jeszcze jest

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

Może być przesadą, ale Apache Commons NumberUtils wydaje się również mieć pomocników.

+1

Chciałbym zmienić ostatnie "+" na "*", aby "123" stało się ważnym wejściem (nic po separatorze dziesiętnym nie jest poprawnym wprowadzeniem) – peterh

+2

Dodałbym czek na NULL ... inaczej będzie crash –

0

Oto jak sprawdzić, czy wejście zawiera cyfrę:

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

hej, dzięki, pomogło to, ale program m nadal kończy się po wyrzuceniu wyjątku. jeśli wyjmę wyjątek, działa idealnie ... dokładnie tak, jak prosiłem, nawet jeśli jest tam numer. każdy pomysł na to, jak nadal działać prgm po wykryciu wyjątku – user1944277

+0

Owiń kod wyrzucając wartość ex-dur w try-catch, wychwytując wyjątek zgłoszony. – Bohemian

+0

Próbowałem już po prostu owijając całą moją część kodu, która monituje dane wejściowe w próbie catch, ale to nie zadziałało, czy możesz wyjaśnić, używając mojego opublikowanego kodu powyżej – user1944277

30

Jeśli wolno używać bibliotek innych firm sugerują, co następuje.

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 
+2

Nie potrzebujesz niczego od strony trzeciej: loop: if (Character.isDigit (c)) –

+3

Uwaga! isNumeric i isDigits zajmują się tylko czystymi liczbami. to znaczy, że zwrócą fałsz na 7,574. (liczby oddzielone przecinkami). –

+0

isNumber (str: String) jest przestarzałe –

4

użyć tej

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

     Double.parseDouble(strNum); 

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

spróbuj przechwycić inne wyjątki również :) jeśli wysłałeś ciąg znaków obiektu "Null", to nie powiedzie się – prime

3
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; 
} 
6
+5

dlaczego głosowanie w dół? – Rudi

+0

Nie oddałem Ci głosu, ale nie musisz dodawać więcej oprogramowania. W języku Java SE: loop: if (Character.isDigit (c)) –

+2

Uwaga! isNumeric zajmuje się tylko czystymi liczbami. tj. zwróci wartość false dla 7,574. (liczby oddzielone przecinkami). –

0

aby sprawdzić, czy wszystko int znaków, można po prostu użyć podwójne negatywne. if (! SearchString.matches ("[^ 0-9] + $")) ...

[^ 0-9] + $ sprawdza, czy są jakieś znaki, które nie są liczbą całkowitą, więc test kończy się niepowodzeniem, jeśli to prawda. Po prostu NIE i osiągasz sukces w kwestii sukcesu.

0

Możesz użyć metody Character.isDigit (char ch) lub możesz również użyć wyrażenia regularnego.

Poniżej znajduje się fragment:

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; 
} 

}

0

pisałem ten mały sposób wreszcie w moim programie, więc mogę sprawdzić, czy ciąg jest numeryczne lub przynajmniej każdy znak jest liczbą.

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; 
} 
4

Prosta metoda.

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; 
} 
Powiązane problemy