Java Regex nur Zahlen zulassen

I-Bot18

Lt. Junior Grade
Registriert
Nov. 2010
Beiträge
291
Hey,

ich hab ein Problem und zwar möchte ich in meinem Programm bei einer Eingabe nur Zahlen zulassen, anders eine Fehlermeldung ausgeben.

Das hab wollte ich mit einem
if(String eingabe.matches("^[a-zA-Z]*$")){
//Fehlermeldung}
realisieren.

Allerdings ist es so, dass wenn ich nun als erstes eine Zahl eingebe und danach Buchstaben ich nicht in den if sondern in den else Zweig komme...

kann mir da jemand weiterhelfen?

Code:
public void einlesen(){
		/*In dieser Methode wird der TIN abgefragt und überprüft. 
		 *Außerdem erfolgt die Berechnung der Prüfziffer
		 */
		int summe=0;
		int produkt=0;
		int stelle=0;

		Scanner t = new Scanner(System.in);

		System.out.println("Ihre TIN eingeben: ");
		String tinString = t.nextLine();
		if(tinString.matches("^[0-9a-zA-Z]*$")){
			System.out.println("Keine gültige Eingabe");
			einlesen();
		}
		tinString = tinString.replaceAll(" ", "");//Leerzeichen werden eliminiert
		if(tinString.length()!=10){
			System.out.println("TIN-Länge falsch");
			einlesen();
			//Überprüfung der Länge
		}
		else{
			//else-Zweig wenn die Eingabe korrektes Format hatte
			System.out.println("Ihre Eingabe (ohne Leerzeichen): "+tinString);
			TIN=tinString;
			if(speicherZiffernanzahl()==true){
				int[]tin = new int[tinString.length()];
				for(int i =0; i<tinString.length();i++){
					tin[i]=Integer.parseInt(String.valueOf(tinString.charAt(i)));
				}
				do{
					summe=(tin[stelle]+produkt)%10;
					if(summe == 0){
						summe=10;
					}
					produkt = (2*summe)%11;
					stelle++;

				}while(stelle<10);
				int pruefziffer = 11-produkt;
				if(pruefziffer == 10){
					pruefziffer=0;
				}
				System.out.println("Prüfziffer: "+pruefziffer);
				TIN = tinString+pruefziffer;
				System.out.println("TIN: (inkl. Prüfziffer) "+ TIN);
			}
			else{
				einlesen();
			}
		}
	}
 
Lass die Zeilenanker weg, also ^ für Anfang und $ für Ende. Sonst matcht das nur wenn der ganze String aus Buchstaben besteht und nichts anderem. Oder du drehst das if um und prüfst auf Zahlen, z.B. "^\d+$" (Eine oder mehrere Zahlen und nichts anderes).
 
Danke für die schnelle Hilfe =)
Lösung von SaxnPaule hat perfekt geklappt danke ;)
 
:D Stimmt, danke auch dir Tenthar ;)
 
Ich wäre vorsichtig mit dem '*' als Quantifier, immer daran denken dass das "0 oder mehr" bedeutet. In dem Fall macht das möglicherweise nichts weil es eh nur ein Token gibt mit dem gematcht wird (eigentlich würde ich hier Probleme erwarten), aber allgemein sollte man immer vorsichtig sein und das Pattern nicht zu weit fassen. Das führt gerne zu schlecht auffindbaren Fehlern, weil sie nur selten auftreten.
 
Zuletzt bearbeitet:
Zurück
Oben