# Leerzeichen zwischen zwei Zeichen im String entfernen



## Sinus (25. Jul 2014)

Hallo 

wie kann man die Leerzeichen zwischen zwei Zeichen in einem String entfernen.
Und zwar habe ich folgendes:


```
String text = "text +     java  - forum hallo";
```

Ich will z.B., daß NUR die Leerzeichen zwischen den Sonderzeichen + und - dem nächsten
Wort entfernt werden
sollen. Es soll also im Prinzip so aussehen:


```
String text = "text +java -forum hallo";
```

geht das irgendwie ohne großen Aufwand?

Vielen Dank im Voraus!
Sinus


----------



## eRaaaa (25. Jul 2014)

Sinus hat gesagt.:


> Ich will z.B., daß NUR die Leerzeichen zwischen den Sonderzeichen + und - dem nächsten
> Wort entfernt werden




Dann wäre das Ergebnis aber genaugenommen so: text +java-forum hallo

Was ist also mit den Leerzeichen nach java ?


----------



## Adelhorst (25. Jul 2014)

Hallo.
Ich würde hier mit der 'replace'-Methode von String arbeiten.
Man könnte mit der Methode zuerst ALLE Leerzeichen ersetzen, und danach dann für jedes Operationszeichen (+-) eine Replace-Operation machen, die diese Operationszeichen durch ein vorgestelltes Leerzeichen ersetzen.

Edit:
Erkenne gerade, dass dies so ja doch nicht geht, da ja dann auch das folgenden Leerzeichen entfernt wird: "forum hallo"

Andere Lösung:
In einer Schleife immer wieder 
- ALLE "+ " durch "+" ersetzen, und zusätzlich
- ALLE "- " durch "-" ersetzen, 
solange ein "+ " oder "- " noch im String vorhanden ist.


----------



## eRaaaa (25. Jul 2014)

Adelhorst hat gesagt.:


> Hallo.
> Ich würde hier mit der 'replace'-Methode von String arbeiten.
> Man könnte mit der Methode zuerst ALLE Leerzeichen ersetzen, und danach dann für jedes Operationszeichen (+-) eine Replace-Operation machen, die diese Operationszeichen durch ein vorgestelltes Leerzeichen ersetzen.



Nein, dann würdest du auch die anderen Leerzeichen z.B. am Ende zwischen forum und hallo wegschneiden. Es geht eventuell mit nur einem einzigen replaceAll, dafür muss aber der TO erst einmal sagen was er denn nun genau haben will!


----------



## Adelhorst (25. Jul 2014)

```
String text 	 = "text +     java  - forum hallo";
while(text.contains("+ ") || text.contains("- ")){
    text = text.replaceAll("\\+ ", "+");
    text = text.replaceAll("- ", "-");
}
```
In einer Schleife immer wieder
- ALLE "+ " durch "+" ersetzen, und zusätzlich
- ALLE "- " durch "-" ersetzen,
solange ein "+ " oder "- " noch im String vorhanden ist.


----------



## eRaaaa (25. Jul 2014)

Adelhorst hat gesagt.:


> ```
> String text = "text +java -forum hallo";
> while(text.contains("+ ") || text.contains("- ")){
> text = text.replaceAll("+ ", "+");
> ...



:autsch:???:L

Also ich bin für

```
System.out.println(text.replaceAll("(.*\\+)(\\s*)(.*?)(\\s*)(-)(\\s*)(.*)", "$1$3$5$7"));
```

wobei, wie oben erwähnt wäre dass dann das Ergebnis nach seinen Textbeschreibungen, nicht nach seinem Beispielstring....


----------



## Adelhorst (25. Jul 2014)

@eRaaa:
Kannst du mir bitte erläutern, was deine Smileys bedeuten sollen. Kann mir keinen Reim drauf machen, was du damit aussagen willst.

Wenn man das Beispiel sieht und dann noch einmal den Text liest, dann kommt man schon darauf, was gefordert wird. Allein das Beispiel ist ja schon aussagefähig.

Kompliment für deinen AllInOne-Code. Aber für einen im 'Anfänger'-Forum Fragenden sollte es dann evtl. doch eine nachvollziehende, mit einfachen Befehlen umzusetzende Methode sein.


----------



## Sinus (25. Jul 2014)

Hallo,

erstmal Danke für eure Beträge.
Ich finde den Lösungsansatz von Adelhorst nachvollziehbar und plausibel.
Ich probier das mal aus...

Vielen Dank
Sinus


----------



## fLooojava (25. Jul 2014)

_@Adlerhorst:_

Das sind regular expressions in Java, aber ja du hast recht..
Regex


----------



## eRaaaa (25. Jul 2014)

Meine Smileys sollen deinen Code in Frage stellen 
Du hast wohl den falschen Anfangsstring genommen, des weiteren musst du das + escapen da es sich um einen regulären Ausdruck handelt!
Und nein, man sollte schon *genau* beschreiben was man will und wenn man schon ein Beispiel anfügt (egal ob als TO oder als Antwortender) sollte es auch zu dem Beschriebenen passen und vor allem auch funktionieren oder besser weglassen und nur den TO auf die richtige Lösung versuchen hinzuleiten, das bringt am Meisten!.


----------



## Sinus (25. Jul 2014)

@eRaaaa: was bedeutet TO?


----------



## Adelhorst (25. Jul 2014)

@eRaaa:
Herzlichen Danke für den Hinweis, habe es berichtigt. War ja doch gut, dass ich nachgefragt habe. Möchte ja auch keinen fehlerhaften Code hier veröffentlichen. Smile

@Sinus:
'TO' ist mir bisher auch nicht geläufig, aber ich interpretiere dies als "ThreadOpener".
Wenn du meinen Code ausprobieren willst, dann bitte den nun berichtigten.


----------



## Sinus (25. Jul 2014)

Hallo,

die Beispiele müssten doch plausibel genug sein? Ich will eigentlich einfach nur, dass alle
Sonderzeichen in einem String unmittelbar nach jedem Wort stehen, das ist alles...

Viele Grüße


----------



## Adelhorst (25. Jul 2014)

Hallo.
Damit sagst du erstens nichts darüber aus, ob du nun mit den Vorschlägen zurechtkommst.

Zweitens geht deine aktuelle Aussage jetzt ganz und gar nicht mit deinem Beispiel/Beschreibung konform, wo NACH allen Sonderzeichen die Leerzeichen entfernt werden sollten, damit Wort direkt auf Sonderzeichen folgt.
Nun sollen alle Sonderzeichen unmittelbar nach einem Wort stehen, also gerade das Gegenteil davon.

Oder möchtest du beides haben?
Da ist bosher weder Beispiel noch Beschreibung plausibel genug. Sorry.


----------



## Joose (25. Jul 2014)

@Sinus
Ungenaue Fragen + Beispiele habe nicht zufriedenstellende Antworten zur Folge ... da wir nur raten können wie es denn wirklich sein soll.

Sollen die Leerzeichen NACH oder VOR den Sonderzeichen entfernt werden?


----------



## Sinus (25. Jul 2014)

Joose hat gesagt.:


> @Sinus
> Ungenaue Fragen + Beispiele habe nicht zufriedenstellende Antworten zur Folge ... da wir nur raten können wie es denn wirklich sein soll.
> 
> Sollen die Leerzeichen NACH oder VOR den Sonderzeichen entfernt werden?



ok ich sehe ein, dass ich mich ungenau ausgedrückt habe, sorry!
Die Zeichen sollen natürlich NACH den Sonderzeichen entfernt werden.

Viele Grüße


----------



## Sinus (25. Jul 2014)

Hallo nochmal,

ich habe folgendes geschrieben und anscheinend funktioniert das so:


```
public static void test() {
		String text = "text -     java  -    forum hallo";
		System.out.println(text);
		while(text.contains("- ")) {			
			text = text.replaceAll("- ", "-");
		}	
		System.out.println(text);
	}
```

Nur wenn ich + statt - verwende bekomme ich im Debug Fenster die Fehlermeldung _... line: not available_


```
public static void test() {
		String text = "text +     java  +    forum hallo";
		System.out.println(text);
		while(text.contains("+ ")) {			
			text = text.replaceAll("+ ", "+");
		}	
		System.out.println(text);
	}
```

Woran könnte das liegen?


----------



## eRaaaa (25. Jul 2014)

Sinus hat gesagt.:


> Woran könnte das liegen?



steht oben bereits. \\+ im replaceAll


----------



## Joose (25. Jul 2014)

Nähere Informationen kannst du der Doku zu String.replaceAll entnehmen :rtfm:


----------



## Sinus (25. Jul 2014)

@eRaaaa: huch . Danke!


----------

