# ReplaceAll (außer)



## Turnschuh (5. Apr 2007)

Hallo zusammen,

ich möchte gerne mit der ReplaceAll - Funktion der Klasse String diverse Zeichen in einem String ersetzen. Aber ich möchte gerne diverse Fälle ausschließen.

Beispiele:
1. Ich möchte alle Buchstaben 'n' ersetzen außer es handelt sich um ein '\n'
2. Ich möchte alle Buchstaben 'b' ersetzen außer es handelt sich um ein '
'

Hat jemand eine Lösung.

Danke und Gruß


----------



## byte (5. Apr 2007)

Das kannst Du mit Regex realisieren. Du musst ein Pattern schreiben und kannst das dann an die String.replaceAll() übergeben.


----------



## turnschuh (5. Apr 2007)

Vielen dank. Aber so weit war ich auch schon. Ich wollte eigentlich wissen, ob das schon mal jemand gemacht hat und ob er ein Stück funktionierenden Code hat.

Weil

```
s.replaceAll("b[^
]", "x")
```
was meine Idee war nicht funktioniert.

Gruß


----------



## SlaterB (5. Apr 2007)

ein Zeilenumbruch \n ist ein einzelnes Zeichen, das kannst du nicht mit n verwechseln, 
oder meinst du \ und n hintereinander?

beim b:

ersetzte alle


durch
<<<<ENTENHAUSEN>>>

dann alle b durch x

und am Ende alle
<<<<ENTENHAUSEN>>>
wieder durch



kannst auch was kürzeres als
<<<<ENTENHAUSEN>>>
nehmen, mir fällt jetzt gerade nicht die 100% sichere Codierung ein


----------



## Saxony (5. Apr 2007)

Hiho,

zu obigen:


```
String s = "bmnkb
lbb
bjklopbhjk";

System.out.println(s);
		
s = s.replaceAll("
", "- Mein Platzhalter am optimalsten einen ohne kleines B :) -");
s = s.replaceAll("b", "x");
s = s.replaceAll("- Mein Platzhalter am optimalsten einen ohne kleines B :) -", "
");
		
System.out.println(s);
```

bye Saxony


----------



## SlaterB (5. Apr 2007)

@Saxony,
das ist ja bisschen witzlos jetzt..


----------



## Saxony (5. Apr 2007)

SlaterB hat gesagt.:
			
		

> ... mir fällt jetzt gerade nicht die 100% sichere Codierung ein



Ich dachte deswegen schreib ich mal bissl Code. 

[edit]Hmm oda meinste mit Codierung das Aussehen des Platzhalters?[/edit]

bye Saxony


----------



## sparrow (5. Apr 2007)

Die hier zuletzt vorgeschlagene Methode ist eindeutig nicht sicher genug.
Die "sichere Codierung" die gesucht wird gibt es nicht.

Im Zweifelsfall kannst du den String auch rund um alle 
 (ich nenn das mal den geschützten Bereich, weil das ja nicht angepasst werden soll) splitten und jeweils das Ersetzen in den jeweil entstandenen Teilstücken durchführen.



Gruß
Sparrow


----------



## Roar (5. Apr 2007)

(?<!\\)n|(?<!<)b(?!r>) :?:


----------



## Illuvatar (5. Apr 2007)

Ja Roar hat Recht. Ich übersetz seine Antwort mal, da sich ja auch nicht jeder mit Regex auskennt :bae:


```
String str = //...
str = str.replaceAll ("(?<!\\)n", "hier stand mal nen n");
str = str.replaceAll ("(?<!<)b(?!r>)", "und hier nen b");
```


----------



## turnschuh (5. Apr 2007)

Sehr geil,

das war das genau das was ich gebraucht habe.

Vielen Dank.


----------



## SlaterB (6. Apr 2007)

natürlich gibt es einen sicheren Weg, jetzt fällt er mir wieder ein:

alle § durch §§ ersetzen
dann alle 
 durch $§$
dann die die b ersetzen
$§$ durch 

und §§ durch §

funktioniert natürlich nur optimal, wenn § und $ nicht im zu ersetzenden Text oder im Ersatztext auftauchen, 
da muss man also ein paar kryptische Zeichen frei haben,
ansonsten gehts aber auch noch (zu ersetzender Text + Ersatztext ebenfalls chiffrieren),
auf jeden Fall kann man nicht b als $ oder § verwenden, eine kleine Fallunterscheidung muss man also machen

bei den bisherigen RegEx-Vorschlägen hat man übrigens den Nachteil, dass auch "<buh>" nicht ersetzt wird,
mag spitzfindig sein,
mag vielleicht auch zu vermeiden sein, weiß nicht


----------

