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 wollte mal wieder euren Fachkundigen Rat einholen. Und zwar bräuchte ich bei folgendem Hilfe. Ich habe in einer Textdatei einen beliebig-langen Text stehen. In diesem kommt irgendwann dieses Schema: "Hallo dies ist ein Test\cell "(der Text vor dem "\cell " kann auch beliebig lang sein). Nun möchte ich das so umwandeln das ich im enddefekt folgendes stehen habe "{@c Hallo dies ist ein Text@}". kann mir da irgendjemand helfen?
Strings sind unveränderbar.
Du könntest bei dem \ splitten (String#split bzw. Pattern#split wenn dus öfters brauchst) und vor/nach dem ersten Part die Zeichen hinschreiben. (Eigendlich werden immer neue Strings erzeugt, wenn du keinen Builder/Buffer verwendest. Der Builder verwendet intern ein wachsendes Array und erzeugt erst am Ende den String, den Buffer hab ich mir nie angeschaut weil der eigendlich nur die synchronisierte Version ist und wann schreibt man schon von mehreren Threads aus einen String.)
Das kannst du irgendwie mit einem RegEx lösen, aber da müsstest du mal mehr Details rausrücken: Wie wird der Anfang der Textstelle definiert? Kann es mehrere solcher Abschnitte geben?
Das problem ist nur, dass dieser Ausdruck mitten in einer Textdatei steht. Mal paar mehr infos meinerseits evtl.^^
Also ich enutze einen BufferedReader um die Textdatei zeile für zeile auszulesen. diese Textzeilen durchsuche ich mit indexOf() auf bestimmte Befehle, in dem Fall den "\cell " befehl. Nun wollt ich halt Fragen ob wie das geht, das dann um den jeweiligen Text vor dem "\cell "befehl ein "{@c" "@}" bekomme.
an sich würde mir auch schon reichen wenn ich wüsste wie ich den Text vor "\cell " "auswählen" kann.
ja es kann mehrere solche Textstellen geben. der Anfang der Textstelle wird an sich immer durch ein "{" oder ein "}" definiert, wobei dieses Zeichen dann nicht mehr mit einbezogen werden soll
RegEx sind zwar fein, du solltest dich aber damit auseinandersetzen und dir nicht einfach einen geben lassen. Sonst wird eine kleine Änderung schon zur Herausforderung.
Das wäre die simplere aber längere Lösung:
is echt prima das ihr euch so viel mühe gebt. die sache ist allerdings die das der text nicht immer am zeilenanfang steht und das beispiel mit split auch mal mitten in der Zeile vorkommen kann. meiner meinung nach geht das nur so, dass er erst den cell-befehl findet und dann muss er solange zurückgehen bis entweder ein { oder ein } kommt und ds is dann der gesuchte Text
Grhh, wie mich das immer aufregt wenn die Leute nicht in der Lage sind vernünftige/vollständige Informationen zu geben und dann erwarten die Hilfe....Erstmal sagst du, dass du so etwac haben willst {@ text @} , dann schreibst du dass { und }nicht miteinbezogen werden sollen. Dazu kommt noch, dass der text mit { ODER } beginnt....Vielleicht wäre eine bessere Struktur der Datei angesagt, und nicht eine "kosmische" Regex...wieso zum Henker soll ein Text mit } beginnen ? Aber naja...habe das beste aus der "Info" gemacht:
Java:
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "{bla bla bla text bla bla bla}\\cell }und dann kommt noch einmmal ein text\\cell";
Pattern pattern = Pattern.compile("(?s)(\\{|\\}){1}(.*?)(\\{|\\})?\\\\cell");
Matcher matcher = pattern.matcher(s);
List<String> strings = new ArrayList<String>();
while(matcher.find()){
strings.add(matcher.group().replaceAll(pattern.toString(), "{@c $2 @}"));
}
for(String st: strings){
System.out.println(st);
}
}
PS. turtle, deins wird nicht funktionieren, da du ein "greedy" benutzst (also .*). Wenn er jetzt so ein String am Stück hätte: "Hallo dies ist ein Test\\cell Ein sehr, sehr langer Text\\cell". Wird deins nur ein Treffer haben. Solltest dir die unterschiede zwischen * , *? und *+ ansehen
erstens, meiner meinung nach sind die Information die ich gegeben habe genügend, und zweitens denke ich dass, bevor man motzt vielleicht alles richtig lesen sollte, da ich geschrieben habe auf die frage hin, was ein Hinweis auf den text is der betrachtet werden soll, das entweder { ODER } auf den text hinweisen. und DIESE sollen nicht mit betrachtet werden. dannach soll dann "{@c" und "@}" um den text gefügt werden.
Und genau um dieses { ODER } geht es...was hat es denn bitte für ein Sinn etwas mit einer schließenden Klammer zu beginnen ? Soll jetzt aber auch egal sein. Versuch' einfach mein Beispiel wenn du magst.