# Aus mehreren Leerzeichen ein Leerzeichen machen



## celloman (22. Mai 2009)

Hallo,

kann mir jemand sagen wie ich aus meehreren Leerzeichen einen Leerzeichen machen kann.


Beispiel:

Hans       Peter


```
String name="Hans      Peter";


name = name.replace('       ', ' ');
```



Funktioniert nicht.


----------



## takidoso (22. Mai 2009)

ich habe es jetzt zwar nicht ausprobiert, aber hast Du es schon mal damit oder etwas ähnlichem versucht?

```
" Hans    Peter".replaceAll("\s+", " ");
```

hier noch ein Link in Bezug auf reguläre Ausdrücke


----------



## celloman (22. Mai 2009)

Ja habe ich.

in einer Zeile habe ich zwischen zwei Wörtern drei lerrzeichen.

Diese möchte ich auf ein Leerzeichen verkürzen.

Habe es mit \r, \n, \t, \r   versucht,

es will aber nicht so wie ich es möchte.


----------



## deepthroat (22. Mai 2009)

Hi.

Der Vorschlag von Takidoso sollte eigentlich funktionieren, bis auf den Aspekt, das man den Backslash entwerten müßte.

Falls es nicht funktioniert mach doch mal bitte ein Minimalbeispiel-Programm was das demonstriert. Bei mir funktioniert es jedenfalls.

Gruß


----------



## hammet (22. Mai 2009)

In einem regex-String ist ein "\s" das Zeichen für einen Space. Die Zeichen die du aufgeführt hast sind im Allgeminen Steuerzeichen (Zeilenumbruch, Tab etc) und haben so direkt erstmal nichts miteinander zu tun.


----------



## deepthroat (22. Mai 2009)

hammet hat gesagt.:


> In einem regex-String ist ein "\s" das Zeichen für einen Space.


Das ist nicht korrekt. Das \s steht für beliebige Leerzeichen (whitespace), als da wären:  <Space> \t \n \r usw.

Gruß


----------



## hammet (22. Mai 2009)

Ok ich wusste nicht, welche Zeichen alles darunter zählen, mir war es nur als Leerzeichen bekannt (was es ja in dem Sinne dann nicht mehr ist).
Danke für den Hinweis.

Allerdings ist es in dem Beispiel korrekt, dass die Steuerzeichen "\r","\t" etc nicht zum gewünschten Ergebnis führen werden


----------



## takidoso (22. Mai 2009)

Also zum einen stimmt es, das die REgex von mir nicht funktioniert weil da noch ein Backslash reingehört, da sonst etwas falsches in den Regex Interpreter reingebracht wird. Zum anderen wenn man patu nicht auf alle Whitespaces eingehen möchte kann man auch es mal mit einem einfachen Space versuchen
also 
"Hans    Peter".replaceAll("\\s+", " ");
oder
"Hans    Peter".replaceAll("[ ]+", " ");
Wenn man grundsätzlich nur von 3Blanks ausgehen möchte ginge vielleicht
"Hans    Peter".replaceAll("[ ]{3}", " ");
naja probiere es einfach mal aus.


----------



## celloman (22. Mai 2009)

So Hallo und Mahlzeit.

also ich habe diesen Text.

4G8_800_415____0210_A87_0001_L      2864,47   -696,77   638,13
4G8_800_415____0210_A88_0001_L      230,00   -806,72   12,42  
4G8_800_415____0210_A88_0001_R      230,00   806,72   12,42   
4G8_800_415____0210_A89_0001_L      251,22   -734,50   121,00 
4G8_800_415____0210_A89_0001_R      251,22   734,50   121,00  
4G8_800_415____0210_A90_0001_L      341,28   -714,70   590,42 
4G8_800_415____0210_A90_0001_R      341,28   714,70   590,42  
4G8_800_415____0210_A91_0001_L      526,22   -751,96   548,11 
4G8_800_415____0210_A91_0001_R      526,22   751,96   548,11  

mit 


```
zeile = zeile.replaceAll("    [ ](4)","");
```

habe ich versucht die leerzeichen wegzumachen, geht aber leider nicht.

Und ich wüsste jetzt nicht wie man aus vie Unterstriche"_" einen Unterstrich macht.

jede Zeile sollte so aussehen.


4G8_800_415_0210_A87_0001_L \n2864,47\n -696,77\n638,13


----------



## deepthroat (22. Mai 2009)

celloman hat gesagt.:


> also ich habe diesen Text.
> 
> 4G8_800_415____0210_A87_0001_L      2864,47   -696,77   638,13
> 4G8_800_415____0210_A88_0001_L      230,00   -806,72   12,42
> ...


So kann es auch nicht funktionieren. Probiere es mal so wie schon mehrfach vorgeschlagen. Und du solltest mal den Link von Takidoso folgen und dich über reg. Ausdrücke informieren.

Gruß


----------



## celloman (22. Mai 2009)

habe die Beispiele ausprobiert will aber nicht.


----------



## Thomas Darimont (22. Mai 2009)

Hallo,

wie wärs denn einfach mit:

```
package de.tutorials;

public class RegexExample {
	public static void main(String[] args) {
		String s ="a  b c  d    e   f     g   h i";
		System.out.println(s.replaceAll(" +"," "));
		
		s ="4G8_800_415____0210_A87_0001_L 2864,47 -696,77 638,13";
		System.out.println(s.replaceAll("_+","_"));
	}
}
```

Ausgabe:

```
a b c d e f g h i
4G8_800_415_0210_A87_0001_L 2864,47 -696,77 638,13
```

Gruß Tom


----------



## celloman (22. Mai 2009)

Hy,

mein Text besteht auch eigendlich mi diesen ,;, " Zeichen.

"4G8_800_415____0210_A01_0001_L";"Widerstandspunktschweissen";"2314,10";"-850,26";

mit den Befehlen


```
zeile = zeile.replace('"',' ');
	         zeile = zeile.replace(';',' ');
zeile = zeile.replaceAll(" +","");
```

habe ich diese Zeichen gelöscht.

dadurch entsteht durch Thomas sein Code 

```
zeile = zeile.replaceAll("_+","_");
```

dashier

```
4G8_800_415_0210_A81_0003_L      1672,50   -531,61   1038,57
```
kann leider die Leerzeichen nicht eirücken.



```
4G8_800_415_0210_A81_0003_L      1672,50   -531,61   1038,57
```


----------



## deepthroat (22. Mai 2009)

celloman hat gesagt.:


> Hy,
> 
> mein Text besteht auch eigendlich mi diesen ,;, " Zeichen.
> 
> ...


Komisch, bei mir entsteht das hier:

```
4G8_800_415_0210_A01_0001_LWiderstandspunktschweissen2314,10-850,26
```
Bist du dir sicher, dass du den richtigen Code und die richtigen Daten hast? Mach doch mal ein konkretes Beispiel so wie Thomas. Danke.

Gruß


----------



## celloman (22. Mai 2009)

Die Datei besteht aus diesem Text.

"4G8_800_415____0210_A01_0001_L";"Widerstandspunktschweissen";"2314,10";"-850,26";"208,00






```
String wd="Widerstandspunktschweissen";
String zeile="";
String teiltext="";

while( (zeile = b.readLine()) != null ) { // liest zeilenweise aus Datei


zeile = zeile.replace('"',' ');
zeile = zeile.replace(';',' ');
zeile = zeile.replace(wd,leer);
zeile = zeile.replaceAll("_+","_");


teitext +=zeile;


}
```

Danach sieht die Ausgabe so aus.


4G8_800_415_0210_A81_0003_R      1672,50   531,61   1038,57


Ich habe viele leerzeichen Zwischen den den Werten.
bekomme Sie nicht weg.


----------



## celloman (22. Mai 2009)

So sieht es aus.
	
	
	



```
4G8_800_415_0210_A81_0003_R      1672,50   531,61   1038,57
```

Ich möcht nur einen Leerzeichen haben.


----------



## deepthroat (22. Mai 2009)

Häng mal bitte einen Ausschnitt der Datei an.


----------



## celloman (22. Mai 2009)

Hier ein kleiner Ausschnitt.


----------



## Thomas Darimont (22. Mai 2009)

Hallo,

...so geht das noch ewig weiter.

Zeig doch einfach mal wie die Eingabe ausschaut und was du gerne als Ausgabe hättest - also ein ganz konkretes Beispiel.

Gruß Tom


----------



## deepthroat (22. Mai 2009)

Hi.

Kann sein das ich mich irre, aber hatten wir nicht in den letzten 10 Beiträgen darüber gesprochen dies zu tun:

```
zeile = zeile.replaceAll(" +"," ");
```

Diese Zeile taucht ja jetzt überhaupt nicht in deinem Code auf? 

Gruß

PS: Evlt. wäre auch interessant was *leer* ist.


----------



## celloman (22. Mai 2009)

hier zwei Dateien eingabe _und Ausgabedateien.


----------



## deepthroat (22. Mai 2009)

Hi.

Also ein kurzer Test:

```
// Groovy

def wd = "Widerstandspunktschweissen"
def leer = ''

new File("eingabedatei.txt").eachLine { line ->
   println "vorher: $line"
   
   line = line.replace('"',' ')
     .replace(';',' ')
     .replace(wd,leer)
     .replaceAll("_+", "_")
     .replaceAll(" +", " ");
     
   println "nachher: $line"
}
```
ergibt für die eingabedatei.txt folgendes:

```
vorher: "4G8_800_415____0210_A01_0001_L";"Widerstandspunktschweissen";"2314,10";"-850,26";"208,00";
nachher:  4G8_800_415_0210_A01_0001_L 2314,10 -850,26 208,00
```
Irgendwas mußt du wohl noch falsch machen...

Gruß


----------



## celloman (22. Mai 2009)

Sorry hatte es zwar eigesetzt aber wieder ausmarkiert.

jetzt geht es.  

DANKE.

Sehe vor lauter Bäume den Walt nicht mehr.


----------

