Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hätte da mal eine Frage, und zwar würde ich bei einem String, der in etwa so aussieht:
"{@i RTF}{ Test abc\{def\}ghi }{ {@b \{}{" jeweils den Text zwischen den Geschweiften-Klammern in ein neues Dokument schreiben, allerdings sollen Geschweifte-Klammern mit einem "\" davor als normaler text behandelt werden. kann mir dabei jemand helfen?
Könntest vielleicht sagen, wie das Ergebnis, dieses gesplitteten Strings aussehen sollte ? Sollen jetzt die Texte innerhalb der Klammer rausgeholt werden, oder soll einfach vor die { ein backslash reingeschrieben werden. Verstehe nicht ganz.
Außerdem ist das Problem bei deinem String, dass innerhalb der Klammern, die gleichen klammern wieder enthalten sind, was nicht gerade hilft ein Regex dafür zu bauen. Solltest dir vielleicht doch überlegen die Struktur in der Datei anders zu gestalten.
in dem fall sollte jetzt das in etwa so aussehen:"@i RTF" "Test abc\{def\}ghi" "@b \{". würde auch gehen das der einzelne text dann in nem string-array abgespeichert wird
die strucktur in der datei kann ich leider nicht anders gestalten, da sie mir so vorgegeben wird
Dein String, so wie er ist, lässt sich nicht in Java compilieren.
Das liegt daran, dass [c]\[/c] ein Steuerungszeichen ist!
Willst du [c]\[/c] als Zeichen haben in einem String haben, musst du es mit dem Backslash [c]\[/c] selbst maskieren...Dann würde dein Bsp-String wie folgt aussehen:
Java:
String s = "{@i RTF}{ Test abc\\{def\\}ghi }{ {@b \\{}{";
Und nun definiere sauber und klar, welchen Teilstrings du haben willst...dann hilft dir bestimmt auch jemand, dir das entsprechende Regex zusammenzubasteln
Ja das Problem hierbei ist, dass bei dir innerhalb dieser Klammern {} auch wieder diese vorkommen ohne dass sie manchmal ein \ davor haben. Da kann man nicht unterscheiden ob das die Klammer ist, die den Text beinhaltet oder ob sie selbst ein Teil des Textes ist. Wenn dann müssten schon alle {}, die als Text interpretiert werden sollen auch mit einem Backslash davor stehen, was hier nicht immer der Fall ist.
Dazu kommt noch das was der "jgh" geschrieben hat. Wobei ich nicht weiß ob wenn man den Text so aus der Datei ausließt, die \ nicht automatisch als Texte erkannt werden. (das ist eher das was ich glaube). Also wenn der Text so in der Textdatei steht ist das kein Problem und muss nichts geändert werden.
@ RySa wegen dem unterschied von Textklammern und den Klammern zwischen den der Text ausgeschnitten werden soll, also es soll immer nur die Klammer als Text behandelt werden die unmittelbar auf das"\"-Zeichen folgt. alle anderen gehören sozusagen nicht zu dem text.
ich halte das für etwas anderes als in dem, Link, da ich schon gern den direkten Text auslesen würde, und nicht die überflüssigen klammern entfernen will, da der Text von mir anschließend noch bearbeitet werden soll, und ich mich da auf verschiedene Fälle beziehen muss. Mit den Vorschlägen aus dem Link kann ich diese Methoden dann allerdings nicht mehr unterscheiden.
So, ich glaube ich habe es geschafft. Allerdings kann dein Text innerhalb der Klammern keine Backslashes als Text enthalten (ich habe ehrlich gesagt keine Lust mehr länger dran zu sitzen):
Java:
public static void main(String args[]){
String test = "{@i RTF}{ Test abc\\{def\\}ghi }{ {@b \\{}{";
Pattern pattern = Pattern.compile("[\\\\]{0}\\{([.[^\\\\\\{\\}]]*(\\\\\\{)?(\\\\\\})?(\\\\)*)*[\\\\]{0}\\}");
Matcher matcher = pattern.matcher(test);
ArrayList<String> strings = new ArrayList<String>();
while (matcher.find()){
strings.add(matcher.group().substring(1,matcher.group().length()-1));
}
for (String string : strings){
System.out.println(string);
}
}
EDIT: Jetzt dürfen glaube ich auch backslashes enthalten sein als text
Ps. Ich fange an regex zu hassen ^^ hat mich jetzt 40 min gekostet so was zu bauen T_T
@RySa nur noch ne klitze kleine frage, wenn ich jetzt jedes "{@" durch "{{@" ersetze, wo muss ich da was in deinem regex ändern das er "{@" als Text ansieht
Dazu soll nicht das Regex geändern werden, sondern der Text. Du hast selbst gesagt, dass jede Klammer die als Text angesehen werden soll ain backslash davor hat. Anders wird es nicht gehen. Du muss dann jedes "{@" durch "{\{@" ersetzen
Gruß