ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
928
928
EMPFEHLEN
-
Hallo und Halli,
habe das Bedürfnis einen String mit einem anderen in einem noch größeren String zu ersetzen.
Dafür bietet sich ja eigentlich String.replaceAll() prima an (Signatur siehe Titel).
Leider habe ich feststellen müssen, dass das nur nicht mit Strings geht, die eine Dollarzeichen ($) enthalten.
Grund ist offenbar dass der in replaceAll verwendete Matcher das Dollarzeichen für das Einfügen von Gruppen vorsieht (so ich das überhaupt richtig interpretiere).
Nun kann man natürlich das $-Zeichen escapen, was aber dazuführt, dass dann nicht $ sondern \$ in meinem Text steht, was nicht das Ziel war
Wie kann man es gescheit hinbekommen ein Dollarzeichen in den zu ersetzenden String einzubringen, der tatsächlich dann als $ in dem Resultat erscheint?
Für gute Ideen bin ich wirklich dankbar, denn mir rennt irgendwie die Zeit davon.
Takidoso
-
17.11.10 11:28 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Warum verwendest du nicht String.replace() wenn du überhaupt keine reg. Ausdrücke verwenden willst?
Ansonsten funktioniert auch replaceAll bei mir tadellos:
Ergebnis:Code java:1
"a b a bb a".replaceAll("a ", "\\$ ");
GrußCode :1
$ b $ bb a
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ich glube ich habe nun doch noch eine Möglichkeit gefunden.
http://www.bennadel.com/blog/255-Iss...ent-Method.htm
brachte mich auf die richtige Idee, auch wenn der Sourcecode da eher an .Net wegen der Groß/Klein-Schreibung erinnert.
Ich muss ergänzend hinzufügen bei meinem Ursächlichen Problem, dass ich für den ersatz Properties verwende.
In diesen Properties muss ich demnach nicht nur \\ sondern \\\ angeben
Kaum machts man richtig funktioniert es auch. Auch wenn ich im Detail nicht wirklich verstehe warum ich nun drei Backslashes benötige und warum 2 dazuführen ein \$ in meinen Text reinzubringen.
mit freundlichen Grüßen
Takidoso
-
17.11.10 12:07 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Du beziehst dich auf die Matcher.quoteReplacement() Methode von der da in den Kommentaren die Rede ist?
Das kann ich nicht nachvollziehen:
Code :1 2 3 4
# a.properties r1 = a \\$ r2 = a \\\$ r3 = a $
Ergebnis:Code java:1 2 3 4 5 6
p.load(stream); "a b a bb a".replaceAll("a ", p.getProperty("r1")); "a b a bb a".replaceAll("a ", p.getProperty("r2")); "a b a bb a".replaceAll("a ", Matcher.quoteReplacement(p.getProperty("r3"))); "a b a bb a".replace("a ", p.getProperty("r3"));
3 Backslashes sind unsinnig, da es keine Escape-Sequenz \$ gibt und somit gilt p.getProperty("r1").equals(p.getProperty("r2")).Code :1 2 3 4
a $b a $bb a a $b a $bb a a $b a $bb a a $b a $bb a
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Jo habe ich gerade auch gemerkt, dass dies mein Ursächliches Problem nicht löst.
Intention war es mit einem OS-Aufruf mittels echo $0 die verwendete Shell rausfinden zu können. Da es mit 2 Backslashes nicht ging, dachte ich es könnte daran liegen, dass für echo das $0 escaped werden würde. Aber offenbar kann man mittels OS-Call nicht mittels echo $0 den wert von $0 bekommen, oder er wird gar nicht erst gefüllt ?
naja irgendwie misteriös.
-
jo da offenbar Java keine shell aufzumachen scheint ...
http://www.tutorials.de/java/369037-...st1911334.html
ist offenbar die Variable $0 auch nicht abrufbar.
damit wäre das vermute ich mal nun auch für mich geklärt
Ähnliche Themen
-
String.replaceAll regex
Von crashfinger im Forum JavaAntworten: 2Letzter Beitrag: 06.01.11, 15:42 -
RegEx: Besteht String nur aus dem gleichen Zeichen?
Von SYS83 im Forum PHPAntworten: 4Letzter Beitrag: 30.08.10, 16:09 -
Regex String in Datei suchen und Zeichen aus String ausgeben.
Von BillaBong im Forum PHPAntworten: 3Letzter Beitrag: 05.01.09, 15:25 -
Zeichen in einem String ersetzen mit Regex für URL bei seo
Von nightryu im Forum PHPAntworten: 8Letzter Beitrag: 07.01.08, 16:00 -
regex: in String A alle Vorkommen von String B finden?
Von dagofan im Forum JavaAntworten: 0Letzter Beitrag: 19.09.07, 21:32





Zitieren

Login





