# String überprüfen ob nur Buchstaben enthalten sind?



## mkay22 (10. Sep 2013)

Hallo,

ich kann mit der Konsole ein String füllen nun soll gleich danach überprüft werden ob der String auch wirklich nur Buchstaben enthält
Code:

```
String firstNameS = "";

			System.out.println("Geben sie Ihren Vornamen ein: ");
			firstNameS = console.readLine();
			if (firstNameS.contains("!") || firstNameS.contains("/") || firstNameS.contains("_") || firstNameS.contains("?") || firstNameS.contains("€") || KEINE ZAHLEN){
				
				System.err.println("Es dürfen keine Zahlen sowie !, /, _, ?, € Zeichen enthalten sein!");
				System.out.println("Geben sie Ihren Vornamen ein: ");
				firstNameS = console.readLine();
				
			}
```

Wär nett wen Jemand die Funktion / Antwort wüsste

MFG Max


----------



## nillehammer (10. Sep 2013)

Das Zauberwort heißt RegularExpressions. Schau Dir mal die String-Methode String#matches an. Falls Du die Prüfung öfter machen musst, schaue Dir auch die Klasse [JAPI]Pattern[/JAPI] an.


----------



## mkay22 (10. Sep 2013)

Du hast recht^^, ABER das gilt nur wenn ausschließlich Zahlen im String enthalten sind wenn die eingabe 
1 wär dann würde die if bedingung alarm schlagen bei test1 jedoch nicht genau das will ich aber^^
mir ist es egal ich habe es jetzt auf den Unschönen Weg (meiner Meinung nach) gelöst, wenn es jedoch keine Funktion dafür gibt dann ist das wohl die einzigste möglichkeit. 
Lösung:

```
if (firstNameS.contains("!") || firstNameS.contains("/") || firstNameS.contains("_") || firstNameS.contains("?") || firstNameS.contains("€") || firstNameS.contains("0")|| firstNameS.contains("1")|| firstNameS.contains("2")|| firstNameS.contains("3")|| firstNameS.contains("4")|| firstNameS.contains("5")|| firstNameS.contains("6")|| firstNameS.contains("7")|| firstNameS.contains("8")|| firstNameS.contains("9")){
				
				System.err.println("Es dürfen keine Zahlen sowie !, /, _, ?, € Zeichen enthalten sein!");
				System.out.println("Geben sie Ihren Vornamen ein, diesmal ohne Sonderzeichen und/oder Zahlen!!!: ");
				firstNameS = console.readLine();
				
			}
```


----------



## nillehammer (10. Sep 2013)

> Du hast recht^^, ABER das gilt nur wenn ausschließlich Zahlen im String enthalten [...]


Das ist Quatsch. Mit Regexen kannst Du nahezu jede beliebige Struktur definieren und dann prüfen, ob ein String diese Struktur hat. Aber, wenn Deine Lösung für Dich jetzt funktioniert, auch gut. Behalt Regexe im Hinterkopf und setze Dich damit auseinander, wenn Du Zeit dafür hast.


----------



## Altairograph (14. Sep 2013)

Du prüfst ob es etwas enthält dass nicht da sein soll, aber wie nilehammer schon gesagt hat wäre es mit regex einfacher da du mit einer regex überprüfen könntest ob der String nur aus Buchstaben besteht. Der Ausdruck ist einfach: [A-z]* (oder [A-z]+ wenn du keinen leeren Strings zulassen willst). Kombiniere das mit der matches Methode und du hast eine if-Anfrage die viel kürzer ist.

EDIT: Der Vorteil von regex ist dass du mit einem Ausdruck prüfen kannst ob es so aussehen so wie es aussehen soll.


----------



## anti-held (16. Sep 2013)

Damit du auch wirklich nur zulässige Zeichen hast, könntest du es auch so überprüfen:
(finde ich am schönsten verständlich)


```
System.out.println("Geben sie Ihren Vornamen ein: ");
            firstNameS = console.readLine();
            while(!isAlpha(firstNameS)) {
                System.err.println("Es dürfen keine Zahlen sowie !, /, _, ?, € Zeichen enthalten sein!");
                System.out.println("Geben sie Ihren Vornamen ein: ");
                firstNameS = console.readLine();
            }

   ...

	public boolean isAlpha(String text) {
		for (char c : text.toCharArray()) {

			// a - z
			if (c >= 'a' && c <= 'z')
				continue;

			// A - Z
			if (c >= 'A' && c <= 'Z')
				continue;

			// ö, ü, ä, ß
			if (c == 'ö' || c == 'ß' || c == 'ä' || c == 'ü')
				continue;

			return false;
		}
		return true;
	}
```


----------



## pirxelbaer (16. Sep 2013)

anti-held hat gesagt.:


> Damit du auch wirklich nur zulässige Zeichen hast, könntest du es auch so überprüfen:
> (finde ich am schönsten verständlich)
> 
> 
> ...


Warum nich per Regex? So ist das doch viel umständlicher und länger.


----------



## geqoo (16. Sep 2013)

Kurz und knapp: 


```
public boolean isAlpha(String text) {
  return text.matches("[a-zA-Z]");
}
```

Trotzdem solltest du dich mit regulären Ausdrücken mal auseinandersetzen. Die können einem viel Arbeit ersparen. 

Der o.g. Code prüft, ob nur zeichen von a bis z und A bis Z (ja, reguläre Ausdrücke unterscheiden Groß- und Kleinschreibung) enthalten sind - und wenn ja, dann gibts ein true, ansonsten false zurück.
ä ö, ü, ß und was es sonst noch so gibt müsste man je nach Lokalisierung natürlich noch hinzufügen.


```
public boolean isAlpha(String text) {
  return text.matches("[a-zA-ZäÄöÖüÜß]");
}
```


----------



## anti-held (16. Sep 2013)

@pirxelbaer
Java-Anfänger sollten sich mit der ASCII-Tabelle befassen und allgemein grundlegenden Themen näher zu kommen.

Ich selbst hätte auch RegEx verwendet. Aber zum verstehen, ist mein Code angenehmer finde ich.


----------



## David_vie21 (15. Nov 2021)

Also ich wollte euren code verwenden aber ich wollte zahlen zulassen und  das ganze auch bei mehrer zeichen also dies ist mein Code

```
public static boolean isAlpha2(String text) {
        boolean is= false;
        for (char c : text.toCharArray()) {

            // a - z
            if (c >= 'a' && c <= 'z')
                {is=true;}

            // A - Z
            if (c >= 'A' && c <= 'Z')
            {is=true;}

            // ö, ü, ä, ß
            if (c == 'ö' || c == 'ß' || c == 'ä' || c == 'ü')
            {is=true;}

        }
        return is;
```

Also ich habe euren nur überarbeitet


----------



## mihe7 (15. Nov 2021)

Ob das die Leute nach 8 Jahren noch großartig interessiert?

BTW: Code im Forum bitte immer formatiert in Code-Tags posten (im Editor oben links auf </> klicken und dort einfügen).


----------

