# String: beginnt mit Buchstabe oder Zahl?



## magic_halli (12. Mrz 2007)

Hi,

ich habe einen String und möchte ganz allgemein in einer if-Bedingung abfragen, ob dieser String mit einer Zahl oder mit einem Buchstabe beginnt (startsWith() ).
Aber wie kann ich das so ganz allgemein auf einen String abfragen bzw. anwenden?

Danke.


----------



## WieselAc (12. Mrz 2007)

eine von sehr vielen Möglichkeiten ist z.B:


```
if(myString.charAt(0)>='0' && myString.charAt(0)<='9') {
  // fängt mit Zahl an
}
```

mit startWith() sollte es etwas komplizerter werden.


----------



## The_S (12. Mrz 2007)

```
if (Character.isDigit(string.charAt(0)) {
   // zahl
}
```


----------



## magic_halli (12. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> ```
> if (Character.isDigit(string.charAt(0)) {
> // zahl
> }
> ```



Das beinhaltet alle Zahlen von  0-9 und liefert mir hier im Erfolgsfalle true?!


----------



## DocRandom (12. Mrz 2007)

ja. 

lg
DocRandom


----------



## thE_29 (12. Mrz 2007)

Na, das liefert zusätzlich noch die imaginären Zahlen (aber nur wenn sie gegen limes unendlich gehen).

Warum schaut man net einfach mal in die API wenn man genau wissen will was ein Befehl tut? 

Und in Java sind die Befehle so benannt das sie sowieso meistens schon so lauten was sie tun!


----------



## Chris_1980 (12. Mrz 2007)

schon tausend bessere möglichkeiten gepostet worden.


----------



## thE_29 (12. Mrz 2007)

Und genausowas entsteht, weil jeder zuviel ist in die API zu gucken 

Warum Methoden implementieren die es sowieso schon gibt?! Muss man jeden Tag das Rad neu erfinden?


----------



## The_S (12. Mrz 2007)

bisschen langsam (antwortzeit) und kompliziert oder?


----------



## me.toString (12. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> ```
> if (Character.isDigit(string.charAt(0)) {
> // zahl
> }
> ```



Das ist nur halbrichtig ... denn wenn der String mit einem Sonderzeichen beginnt - was ja definitiv KEIN Buchstabe ist - dann wird es trotzdem als Buchstabe bezeichnet. Ich benutze für solche Sachen gerne reguläre Ausdrücke ... da kann man dann hinterher das Ganze noch erweitern ... z.B. fängt der String mit einem kleinen oder großen Buchstaben an ... fängt der String mit einer zweistelligen Zahl an ... usw.  Wie reguläre Ausdrücke verwendet werden ist schön in der API (hier) beschrieben. Also ich würde das so machen:

```
if( deinString.matches( "[a-zA-Z" ) )
  // es ist ein String
if( deinString.matches( "[0-9]" ) )
  // es ist eine Zahl
else
  // es ist irgendwas anderes
```
[/code]


----------



## Chris_1980 (12. Mrz 2007)

jep! (zum Hobbit u. 29) man, man, hier ist ja was los in dem Thread.


----------



## The_S (12. Mrz 2007)

ehli75 hat gesagt.:
			
		

> Hobbit_Im_Blutrausch hat gesagt.:
> 
> 
> 
> ...



Was ist daran halbrichtig? In meinen Augen ist das vollkommen und ohne Einschränkungen richtig! Hab ja nirgendwo behauptet, dass es andernfalls unter allen Umständen nur ein normaler Buchstabe ist ...


----------



## me.toString (12. Mrz 2007)

OK ... ich geb's zu deine Aussage ansich ist richtig ... aber nicht die komplette Lösung des Problems ... oben steht


> ... ob dieser String mit einer Zahl oder mit einem Buchstabe beginnt ...


... und da ist deine Lösung nur zur Hälfte richtig!


----------



## The_S (12. Mrz 2007)

k, angenommen


----------



## Leroy42 (12. Mrz 2007)

ehli75 hat gesagt.:
			
		

> > ... ob dieser String mit einer Zahl *oder* mit einem Buchstabe beginnt ...



Ganz exakte Umsetzung:


```
if (s.length > 0 && (Character.isDigit(s.charAt(0) || Character.isLetter(s.charAt(0))))
  ...
```


----------



## me.toString (12. Mrz 2007)

Ich will ja kein Haarspalter sein ... aber deine Klammersetzung war nicht ganz korrekt ... ;o)
So is's korrekt:


```
if (s.length > 0 && (Character.isDigit(s.charAt(0)) || Character.isLetter(s.charAt(0)))
```


----------



## magic_halli (13. Mrz 2007)

So, danke erstmal für die  Antworten... hat sich ja zu ner Diskusion aufgeschaukelt  :wink: 

Im Endeffekt mache ich das jetzt so, dass ich meinen String von Anfang bis Ende durchlaufe und prüfe, ob nur Ziffern enthalten sind. Wenn nicht, wird der String auf einen neuen Wert gesetzt.

```
String inhalt = value.GetStringValue();
for(int i=0; i<inhalt.length();i++){
   if (! Character.isDigit(inhalt.charAt(i))) {
      inhalt = "00000000";
   }
}
```
Jetzt ist mir aber noch eingefallen, dass ein "-" als einziges anderes Zeichen drin vorkommen darf!
Wie bringe ich das aber jetzt meiner Abfrage bei? 


Gruß


----------



## The_S (13. Mrz 2007)

eh, das ist doch viel zu umständlich so ...


```
try {
   Integer.parseInt(inhalt);
}
catch (NumberFormatException e) {
   inhalt = "00000000"; 
}
```


----------



## Chris_1980 (13. Mrz 2007)

```
String inhalt = value.GetStringValue(); 
for(int i=0; i<inhalt.length();i++){ 
   if (! (Character.isDigit(inhalt.charAt(i)) ||  inhalt.charAt(i) == '-')) 
   { 
      inhalt = "00000000"; 
   } 
}
```


----------

