Jackson: Reguläre Ausdrücke in Java

Hi,

ich bin dabei Java zu lernen und habe mir deswegen ein kleines Projekt überlegt. Jetzt möchte ich gerne mit Hilfe von Regulären Ausdrücken einen String "bearbeiten".

Mein Code: (ohne Formatierung, da es für Java keine gibt)

Matcher matcher = Pattern.compile("[*\s\n*]").matcher("Dies ist mal ein Test");
StringBuffer outputNeu = new StringBuffer();
while (matcher.find()) {
  matcher.appendReplacement(outputNeu, "$");
}
matcher.appendTail(outputNeu);

Erklärung: Ich möchte in dem String "Dies ist mal ein Test" alle Leerzeichen durch $ Zeichen ersetzen. Leider bekomme ich folgende Exception: String index out of range: 1

Wahrscheinlich liegt es an der RegEx, leider habe ich keine Ahnung warum. Ich habe diese RegEx mit Hilfe einer Inet Seite erstellt und ausprobiert, hat wunderbar geklappt. Warum klappt sie jetzt in Java nicht? Hat Java vllt. eigene Ausdrücke für sowas oder habe ich einfach was übersehen?

Vielen Dank für eure Hilfe.

Gruß
Jackson

  1. Hi!

    Mein Code: (ohne Formatierung, da es für Java keine gibt)

    Es gibt eine, es gibt nur keinen Button dafür. Nimm einfach JavaScript und lösch das "script".

    Leider bekomme ich folgende Exception: String index out of range: 1

    Ich hab keine große Ahnung von Java, aber selbst wenn du mit Texteditor und Kommandozeilenwerkzeugen statt einer IDE arbeitest, solltest du zumindest eine Zeilennummer angezeigt bekommen und kannst anhand dieser die Fehlerstelle genauer spezifizieren. Eine IDE wird sicher noch etwas besser sein und den Cursor innerhalb der Zeile auf den Fehler stellen.

    Lo!

    1. Es gibt eine, es gibt nur keinen Button dafür. Nimm einfach JavaScript und lösch das "script".

      Das muss man aber auch erstmal wissen.^^ Danke für den Tipp.

      Ich hab keine große Ahnung von Java, aber selbst wenn du mit Texteditor und Kommandozeilenwerkzeugen statt einer IDE arbeitest, solltest du zumindest eine Zeilennummer angezeigt bekommen und kannst anhand dieser die Fehlerstelle genauer spezifizieren...

      Ich nutze eine IDE und die Zeilennummer stand auch da, ich hab sie nur übersehen.

  2. Hi,

    Matcher matcher = Pattern.compile("[*\s\n*]").matcher("Dies ist mal ein Test");

    Was versprichst Du Dir davon, den Stern zweimal in die Zeichenklasse reinzuwerfen?

    StringBuffer outputNeu = new StringBuffer();
    while (matcher.find()) {
      matcher.appendReplacement(outputNeu, "$");
    }
    matcher.appendTail(outputNeu);
    Erklärung: Ich möchte in dem String "Dies ist mal ein Test" alle Leerzeichen durch $ Zeichen ersetzen. Leider bekomme ich folgende Exception: String index out of range: 1
    Wahrscheinlich liegt es an der RegEx,

    Nein. Am Replacement. Mit "x" funktioniert's wunderbar.
    Im Replacement wird mit $ eine Referenz auf eine Gruppe eingeleitet. Und da dem Dollarzeichen an Position nichts folgt, geht der Zugriff auf die Gruppennummer an Position 1 schief.

    Wenn ein literales $ gewünscht wird, muß dieses also escaped werden.

    leider habe ich keine Ahnung warum.

    Dann verschaffe Dir Ahnung. Z.B. durch Lesen der Javadoc zu den von Dir verwendeten Klassen. Interessant könnte für Dich auch quoteReplacement in einer dieser Klassen sein. Ich sag jetzt absichtlich nicht, in welcher ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Was versprichst Du Dir davon, den Stern zweimal in die Zeichenklasse reinzuwerfen?

      Davor und danach dürfen beliebig viele Zeichen kommen. Ich hab aber grade gemerkt, dass man ihn garnicht braucht.

      Dann verschaffe Dir Ahnung. Z.B. durch Lesen der Javadoc zu den von Dir verwendeten Klassen. Interessant könnte für Dich auch quoteReplacement in einer dieser Klassen sein. Ich sag jetzt absichtlich nicht, in welcher ...

      Danke, darauf hätte ich auch selber kommen können.

      Jetzt funktioniert es jedenfalls.

      Gruß
      Jackson

      1. Hi,

        Was versprichst Du Dir davon, den Stern zweimal in die Zeichenklasse reinzuwerfen?
        Davor und danach dürfen beliebig viele Zeichen kommen.

        Häh?

        Dir fehlen offensichtlich auch Grundlagen der Regulären Expressions.
        Ein Stern hat in der Zeichenklasse die Bedeutung eines Sterns. Und sonst nichts.
        Nix von wegen beliebig viele oder so.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Hi,

          Ein Stern hat in der Zeichenklasse die Bedeutung eines Sterns. Und sonst nichts.

          Ja, hab mir dazu mal den Wikipedia Artikel durchgelesen und bin jetzt auch schlauer.

          Gruß
          Jackson