# Prüfen, ob ein String eine Zahl ist



## ToterTag (2. Nov 2010)

Per Google finde ich nur mehrzeilige Codes und eigene Funktionen. Ich will es aber möglichst einfach haben. Ich meine, ich hätte in Erinnerung, dass so etwas in die Richtung funktioniert: 
	
	
	
	





```
String example = "56";
if(example.isNumeric)
{
    // tu was
}
```
Wie lautet der genaue Methodenname?


----------



## bygones (2. Nov 2010)

gibt es nicht.

möglichkeiten:

a) per Double.parseDouble schauen obs klappt
b) char weise durchgehen und isDigit pruefen
c) per regex

plus weitere möglichkeiten


----------



## Landei (2. Nov 2010)

Du kannst in einem try-catch Integer.parseInt, Double.parseDouble oder so "ausprobieren", und wenn dir keine NumberFormatException um die Ohren fliegt, ist es eine Zahl. Aber ein Regex-Künstler kann dir sicher auch weiterhelfen (auch wenn das bei doubles wegen der eventuellen e-Schreibwiese nicht ganz trivial ist).


----------



## noobadix (2. Nov 2010)

Vermutlich stiltechnisch schlecht, aber: Wenn Integer.parseInt(String arg) eine Exception wirft, ist es keine Zahl.

edit: sind wir uns ja einig


----------



## ToterTag (2. Nov 2010)

Ich erwarte in dem String nur eine natürliche Zahl. Sprich: Positiv, kein Komme, keine E-Schreibweise, kein Hexalwert, kein L hinter der Zahl, kein gar nichts. Nur eine Zahl, die in diesem Fall sogar aller höchstens 2 Stellen hat.

Ich will keine Fehlermeldungen provozieren, das Programm wird zwar später ohne Kommandozeile laufen, aber trotzdem will ich das 1. nicht und 2. ist es bestimmt verdammt unübersichtlich, wenn man mein Testlauf 2 Werte in der Konsole ausgeben will und erst mal 20 Fehlermeldungen zu sehen bekommt.

Wie mache ich das jetzt am ungeschicktesten, um keine Fehlermeldung zu erhalten?


----------



## bygones (2. Nov 2010)

ToterTag hat gesagt.:


> Wie mache ich das jetzt am ungeschicktesten, um keine Fehlermeldung zu erhalten?




```
public static boolean isNumeric(String value) {
 try {
    int number = Integer.parseInteger(value);
    return number < 100; 
 }
 catch(NumberFormatException e) {
   return false;
 }
}
```

so ist aber immer die Gefahr falscheingaben einfach zu schlucken....


----------



## noobadix (2. Nov 2010)

Man kann auch weiter vorher ansetzen und auf der Konsole mit Scanner.hasNextInt() oder in Swing mit einem Spinner+SpinnerNumberModel arbeiten.


----------



## ToterTag (2. Nov 2010)

Also so weit wie ich das jetzt verstanden habe, hast du den Code so geschrieben, dass er mir auch dann false zurück gibt, wenn der String zwar eine Zahl ist, diese Zahl aber nicht kleiner als 100 ist. Stimmt das? Sollte ich nicht einfach return true; schreiben?

Und wenn ich die Zahl jetzt in eine als int deklarierte Variable speichern will, muss ich diesen Code verwenden? 
	
	
	
	





```
int intVariable = Integer.parseInteger(stringVariable);
```


----------



## Tomate_Salat (2. Nov 2010)

hmm ich würde das eher mit regex prüfen:

```
String entry = "125";
		
if(entry.matches("[0-9]+"))
	System.out.println("erlaubt");
else
	System.err.println("nicht erlaubt");
```

*edit*


----------



## bygones (2. Nov 2010)

ToterTag hat gesagt.:


> Also so weit wie ich das jetzt verstanden habe, hast du den Code so geschrieben, dass er mir auch dann false zurück gibt, wenn der String zwar eine Zahl ist, diese Zahl aber nicht kleiner als 100 ist. Stimmt das? Sollte ich nicht einfach return true; schreiben?[/code]


ich habe dein "max 2 Stellen" noch eingebaut, was ja heisst kleiner als 100. und number < 100 gibt ja schon einen boolean zurück.

ansonsten find ich noobadix vorschlag am besten... je nach dem wo die Zahl herkommt gibt es schon mechanismen die einem helfen


----------



## ulrichx (3. Dez 2019)

Da es mich auch gerade beschäftigt hat..

```
public boolean istEineZahl(String eingabe) {
        //Prüfen ob 'eingabe' eine ganze Zahl ist. Wenn ein Zeichen keine Zahl ist, ist das Ergebnis 'false'.
        boolean zahl=true;
        char[] c;
        int i;
        
        eingabe=eingabe.trim();
        c=eingabe.toCharArray();
        
        for (i=0;i < eingabe.length();i++) {
            if (!Character.isDigit(c[i])) {
                zahl=false;
            }
        }
        return zahl;
    }
```


----------

