# String - Zeichen am Anfang entfernen



## Povlsen84 (23. Sep 2009)

Hi,

möchte bei einem String bestimmte Zeichen entfernen sofern sie am Anfang vorkommen.

z.B. soll "(8) - haha" zu "haha" werden, "(8) haha -" dagegen zu "haha -".

quick 'n dirty sieht das derzeit bei mir so aus:


```
while(true){
			if(	tmp.length() > 1 && (tmp.startsWith("(") || tmp.startsWith(")") ||
										tmp.startsWith(" ") || tmp.startsWith("1") || 
										tmp.startsWith("2") || tmp.startsWith("3") ||
										tmp.startsWith("4") || tmp.startsWith("5") ||
										tmp.startsWith("6") || tmp.startsWith("7") ||
										tmp.startsWith("8") || tmp.startsWith("9") ||
										tmp.startsWith("-") || tmp.startsWith("+") ||
										tmp.startsWith("_") || tmp.startsWith("."))){				
				tmp = tmp.substring(1);
			} else
				break;
		}
```


Das muss doch auch schöner gehen 

lG aus Berlin


----------



## Leroy42 (23. Sep 2009)

Povlsen84 hat gesagt.:


> möchte bei einem String bestimmte Zeichen entfernen...



Das geht gar nicht da Strings in Java imutable also *unveränderlich* sind. :noe:


----------



## faetzminator (23. Sep 2009)

Am einfachsten mit Regex, so würde ich es machen:

```
str = str.replaceAll("^\\s*\\(\\d+\\)\\s*(\\-\\s*)?", "");
```


----------



## Povlsen84 (23. Sep 2009)

Mmmh, auf die schnelle sehe ich bei den regulären Ausdrücken nicht durch. Der von dir gepostete Code, entfernt zumindest auch keine führende Zahl.

Meinem Kopf ist eben noch das folgende wunderschöne Konstrukt entsprungen, leider wird nur jeweils einmal ein führendes, störendes Zeichen entfernt. Bin aber unsicher ob ich mich wirklich in die detailierten Abgründe der GOTO Derivate stürzen möchte ^^


```
String tmp 		= "";		
		String [] ign = {"0","1","2","3","4","5","6","7","8","9"," ","-","+","_","(",")"};
		
		marke1:
			if(tmp.length() > 1){
				for(String s : ign){
					if(tmp.startsWith(s)){
						tmp = tmp.substring(1);
						break marke1;
					}			
				}
			}
```

Werde mir nachher wohl die regulären Ausdrücke ansehen müssen.

Vielen Dank einstweilen.


----------



## SlaterB (23. Sep 2009)

```
str = str.replaceAll("^[ 0-9().-]+", "");
```


----------



## Povlsen84 (23. Sep 2009)

Danke


----------



## Ark (23. Sep 2009)

SlaterB hat gesagt.:


> ```
> str = str.replaceAll("^[ 0-9().-]+", "");
> ```



Fehlt in diesem Ausdruck nicht noch das +-Zeichen?

Ark


----------



## SlaterB (23. Sep 2009)

oh ja, und der der Unterstrich, hab nicht genau genug nachgeschaut

wichtig ist, dass man die fehlenden Zeichen nicht am Ende einfügt, sonst könnte
.-+ als 'alle Chars von . bis zum +' interpretiert werden wie bei 0-9,
das - als letztes


----------



## Povlsen84 (23. Sep 2009)

SlaterB hat gesagt.:


> ... wichtig ist, dass man die fehlenden Zeichen nicht am Ende einfügt, sonst könnte
> ...



Habe ich gemerkt 

Danke!


----------



## faetzminator (23. Sep 2009)

Ark hat gesagt.:


> Fehlt in diesem Ausdruck nicht noch das +-Zeichen?



Vor allem matcht diese Regex alles, da sie einen unescapten [c].[/c] beinhaltet.
Zu meinem Regex: du hast nicht erwähnt, dass es auch eine Zahl, welche nicht in Klammern steckt, entfernen muss. Hier wäre mein Vorschlag dazu (, welchen ich durchsichtiger als SlaterB's Idee finde):

```
str = str.replaceAll("^\\s*\\(?\\d+\\)?\\s*(\\-\\s*)?", "");
```


----------



## Ark (23. Sep 2009)

SlaterB hat gesagt.:


> oh ja, und der der Unterstrich



Den habe ich auch noch übersehen.  Ich glaube, ich werd' langsam alt. oO

EDIT@faetzminator: Ich glaube, ein [c].[/c] in einer Zeichenmenge hat keine besondere Bedeutung.

Ark


----------



## SlaterB (23. Sep 2009)

@faetzminator
nana, nix über unescapten . sagen, wenn du es nicht getestet hast 

um die eckige Klammer kommst du nicht herum, denn auch
-3-3-3-3-3-3-3-3-3-3-3-Test
muss komplett weggelöscht werden bis zum Test

edit: 
ok, (....)+ reicht bestimmt auch für Wiederholung, aber bei einzelnen Zeichen kann man [ ]+ gut nutzen


----------

