Java - Benutzereingabe auf Zahlen überprüfen?
public boolean onlyNumbers(String eingabe) {
String regex = "[a-zA-Z]+";
if (Pattern.matches(regex, eingabe)) {
return true;
} else {
return false;
}
}
Gibt eine simple Methode wie man die Eingabe überprüfen kann ob ausschließlich Zahlen darin vorkommen (vergleichbar mit dem Beispielcode oben mit String)?
Der Parameter ändert sich zu einem int.... sprich es soll eine int Prüfung stattfinden
4 Antworten
Hey,
es gäbe da zwei Möglichkeiten, die du nutzen kannst:
Du kannst, wie oben auch, einen RegEx nutzen, das würde dann so aussehen:
public boolean onlyNumbers(String input) {
return input.matches("^\\d+$");
}
Alternativ kannst du auch eine Methode erstellen, die dir den String direkt umwandelt, falls möglich. Dafür lässt sich bspw. Optional benutzen:
public Optional<Integer> parseToInt(String input) {
try {
int i = Integer.parseInt(input);
return Optional.of(i);
} catch (NumberFormatException exception) {
return Optional.empty();
}
}
Mfg Jannick (L1nd)
ein int ist per definition immer eine zahl. Wenn du also ein Int von irgendwoher bekommst. Dann ist das eine Zahl. Immer. Da muss man nichts prüfen.
Ansonsten wenn du einen String hast. Und diesen dann in ein Int umwandeln musst. Geht das am einfachsten mit den Parse Methoden. ich glaube: Integer.ParseInt oder so. Die fliegt dir einfach um die Ohren wenn der String keine zahl ist die mit einem Int verarbeitet werden kann.
Ansonsten kannste einfach mit einer regex einen String auf zahlen prüfen. Anstatt a-zA-Z würd ich einfach 0-9 eintragen. Das dürfte schon ausreichen.
Du musst eigenlich nur den Regex anpassen auf z.B. sowas
\d+
Vielleicht macht eine Version mit Zeilenanfang und Ende auch Sinn:
^\d+$
Naja, wenn deine Funktion ein Int übergeben bekommt kann es sich doch nur um Ganzzahlen handeln...?
geht es mit regex, oder klappt das ausschließlich für Strings. Der code dient nur als Beispiel. Darauf muss nicht aufgebaut werden
Ein regulärer Ausdruck macht nur bei Strings Sinn... Ich glaube du solltest nochmal die Sinnhaftigkeit deiner Funktion überdenken, da wie gesagt ein int immer nur Zahlen sind (bis auf ein - Zeichen vorne).
Das habe ich verstanden. Ich suche nach alternativen Methoden wie man eine "int" Prüfung durchführt, vergleichbar mit dem Beispielcode für Strings oben...
Glaub wir reden aneinadner vorbei
Eventuell hilft dieser Code zum Verständniss was ich meine:
.
..
...
int eingabe = scanner.nextInt();
if (onlyInt(eingabe){
System.out.println ("Die Eingabe war erfolgreich!");
}
else {
System.out.println ("Bitte nur Zahlen verwenden!");
}
...
..
.
ich sucher eine eine Vorgehensweise für die Methode "onlyInt"
Du denkst hier viel zu kompliziert und falsch.
Wenn die nextInt Methode noch keine Exception geworfen hat, dann wurde die Eingabe schon erfolgreich als Int eingelesen.
Was du also eher machen musst ist die
InputMismatchException
abzufangen und dann die Fehlermeldung rausgeben.
Das hätte dir aber auch ein kurzer Blick in die Java Dokumentation gesagt...
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#nextInt-int-
Der Beispielcode würde beim nextInt() schon eine InputMismatchException werfen, wenn der Benutzer keine Zahl eingibt. Du musst mit "onlyInt" also erstmal prüfen, ob der Benutzer eine Zahl eingegeben hat und wenn das zutrifft, kannst du die Zahl mit Integer.parseInt(eingabe) in ein int umwandeln.
Bei der Prüfung müsstest du dann aber nicht nur schauen, ob nur Ziffern eingegeben wurden, sondern auch ob ein plus oder minus vorne dran steht, ob die Zahl in ein int reinpasst (-2147483648 - 2147483647), ob vielleicht die Exponentialschreibweise benutzt wurde (12E5) und vielleicht noch andere Sachen. Daher würde ich einfach mit try-catch versuchen, die Eingabe umzuwandeln.
String eingabe = scanner.nextLine();
try {
int eingabeZahl = Integer.parseInt(eingabe);
System.out.println("Die Eingabe war erfolgreich: " + eingabeZahl);
} catch(NumberFormatException e) {
System.out.printlin("Die Eingabe \"" + eingabe + "\" ist keine Zahl.");
}
Mit dem int-Parameter hast du einen Denkfehler. Du willst ja prüfen, ob die Benutzereingabe eine Zahl ist. Der Benutzer kann aber auch "abc" eingeben und die Funktion soll dann eben sagen "das ist keine Zahl". Also brauchst du als Parameter einen String.
Der Code wäre dann etwa so:
public boolean onlyNumbers(String eingabe) {
return Pattern.matches("[0-9]+", eingabe);
}
Der Parameter ändert sich jedoch zu [ int eingabe]. Es soll ein int und kein String überprüft werden