tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
928
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    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
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    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:
    Code java:
    1
    
    "a b a bb a".replaceAll("a ", "\\$ ");
    Ergebnis:
    Code :
    1
    
    $ b $ bb a
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    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
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von takidoso Beitrag anzeigen
    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.
    Du beziehst dich auf die Matcher.quoteReplacement() Methode von der da in den Kommentaren die Rede ist?

    Zitat Zitat von takidoso Beitrag anzeigen
    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.
    Das kann ich nicht nachvollziehen:
    Code :
    1
    2
    3
    4
    
    # a.properties
    r1 = a \\$
    r2 = a \\\$
    r3 = a $
    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"));
    Ergebnis:
    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
    3 Backslashes sind unsinnig, da es keine Escape-Sequenz \$ gibt und somit gilt p.getProperty("r1").equals(p.getProperty("r2")).

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    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.
     

  6. #6
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    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

  1. String.replaceAll regex
    Von crashfinger im Forum Java
    Antworten: 2
    Letzter Beitrag: 06.01.11, 15:42
  2. Antworten: 4
    Letzter Beitrag: 30.08.10, 16:09
  3. Antworten: 3
    Letzter Beitrag: 05.01.09, 15:25
  4. Antworten: 8
    Letzter Beitrag: 07.01.08, 16:00
  5. Antworten: 0
    Letzter Beitrag: 19.09.07, 21:32