# String auf Sonderzeichen untersuchen



## serious (13. Nov 2010)

Hallo liebe Community,
ich habe eine Frage zu einer Teilaufgabe von meiner Programmieraufgabe.
Kurze Zusammenfassung: Ich habe drei Inputfelder als Textfields (inputMask, inputHand, inputWord), die ich einlesen soll und als Großbuchstaben wiederausgeben soll. Dann soll mit einer Methode "check" untersucht werden, ob alle Felder gültige Zeichen enthalten (Alphabet "A-Z", Unterstrich "_" und Fragezeichen "?" sind zugelassen). Außerdem muss "inputWord" mindestens 2 Buchstaben lang sein.
Sind nicht zugelassene Zeichen eingegeben worden, soll eine Fehlermeldung in einer bereits vorgegebenen TextArea erscheinen.

Hier meine Idee bisher:


```
void findWord() {
		String mask = inputMask.getText();
		String bigMask = mask.toUpperCase();
		String hand = inputHand.getText();
		String bigHand = hand.toUpperCase();
		String word = inputWord.getText();
		String bigWord = word.toUpperCase();		
		
	}
	
	public void check(String bigWord, String bigHand, String mask) {
		boolean correctInput = false;
		
		for (int i = 0; i < bigWord.length(); i++) {
			if (bigWord.charAt(i) == )
			
		}
		
	}
```

Ich komme irgendwie nicht drauf, wie ich jetzt genau sagen kann "Untersuche den Buchstaben der i-ten Stelle mit dem Alphabet, "?" und "_".

Ich hoffe ihr könnt mir ein paar Tipps geben. 

Mit freundlichen Grüßen,
Serious


----------



## Marco13 (13. Nov 2010)

Character (Java Platform SE 6) und ähnliche Methoden können da helfen.


----------



## XHelp (13. Nov 2010)

Jeden String in Großbuchstaben noch mal gespeichert halten lohnt sich nicht, du kannst es auch nur zur Ausgabe umwandeln.

Zu der eigentlichen Aufgabe:

```
public void check(String bigWord, String bigHand, String mask) {
  boolean correctInput = true;
  bigWord = bigWord.toLowerCase();
  for (Character c:bigWord.toCharArray()) {
    if (!( (c>='a' && c<='z') || (c=='?') || (c=='_') )) {
      correctInput = false;
    }
  }
}
```
So könntest du z.B. 
	
	
	
	





```
bigWord
```
 untersuchen.
Eine andere überlegung wäre aber RegEx, da es übersichtlicher ist:

```
public void check(String bigWord, String bigHand, String mask) {
  boolean correctInput = true;
  if (!bigWord.matches("[a-zA-Z_?]*")) {
    correctInput = false;
  }
}
```

_(der Code sieht so komisch aus, weil ich davon ausgehe, dass anschließend noch 2 Vergleiche kommen, dadurch kann man 
	
	
	
	






		Code:In die Zwischenablage kopieren


correctInput

 nicht einfach zuweisen.)_


----------



## serious (13. Nov 2010)

XHelp hat gesagt.:


> _(der Code sieht so komisch aus, weil ich davon ausgehe, dass anschließend noch 2 Vergleiche kommen, dadurch kann man
> 
> 
> 
> ...



Ehrlich gesagt verstehe ich nicht, was du meinst. Soll ich also das 
	
	
	
	





```
boolean correctInput = true
```
 weglassen?

Das mit den Großbuchstaben brauch ich für später. Ich wollte nicht die ganze Aufgabenstellung hinschreiben, weil ich hänge ja bisher wirklich nur an dieser Teilaufgabe. Den Rest krieg ich schon irgendwie hin. 

Ich werde nun das mit 
	
	
	
	





```
bigWord.Matches "[ ]"
```
 mal ausprobieren. Danke für den Hinweis.
Ich hab das Problem zwar "gelöst" aber ich glaub, ihr würdet mich auslachen wenn ihr seht, wie umständlich ich das gemacht habe

Edit: Darf ich noch kurz fragen, wofür das "*" bei 
	
	
	
	





```
bigWord.Matches("[A-Z?_]*")
```
 ist? 

Mit freundlichen Grüßen,
Serious


----------



## aedu00 (13. Nov 2010)

serious hat gesagt.:


> :
> 
> Edit: Darf ich noch kurz fragen, wofür das "*" bei
> 
> ...



kann beliebig oft hintereinander vorkommen, jedoch auch gar nicht. + wäre mindestens einmal

Mehr dazu:
Regulärer Ausdruck ? Wikipedia

Versuch doch das 1 Beispiel auch zu verstehen, dies ist nämlich sehr interessant... mit Sicherheit auch effizienter.


----------



## XHelp (13. Nov 2010)

serious hat gesagt.:


> Ehrlich gesagt verstehe ich nicht, was du meinst. Soll ich also das
> 
> 
> 
> ...



Nein, so meinte ich das nicht.

```
public void check(String bigWord, String bigHand, String mask) {
  boolean correctInput = true;
  correctInput = !bigWord.matches("[a-zA-Z_?]*");
  correctInput = !bigHand.matches("[a-zA-Z_?]*");
}
```
Sowas darfst du nicht hinschreiben, da du correctInput überschreiben würdest. Sollte bigWord z.B. nicht deinem Muster entsprechen, aber bisHand schon, würde das Ergebnis dennoch "wahr" sein.


----------



## serious (13. Nov 2010)

Ah ok. Ja das wusst ich ^^
Danke für eure Hilfe. Hab die Teilaufgabe gelöst und werd mich dann mal der nächsten widmen.
Schönes Wochenende euch noch.

Mit freundlichen Grüßen,
Serious


----------

