Suchen-Ersetzen mal anders(?)

  • Themenstarter Themenstarter preggie
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
P

preggie

Gast
Hallo, bin auf dem Gebiet Java ein Newbie, deshalb bitte nicht schlagen..

Ich suche eine spezielle Suchen-Ersetzen-Funktion für einen Chat.
Und zwar geht es da um eine Bold und Italic Funktion. Ich will es am Beispiel Bold erklären - Kursiv wäre der selbe Weg.
Wird im Chat ein + geschrieben, soll alles folgende Fett werden. Bisher kein Problem, doch nun das dicke Aber - wird im Satz ein weiteres + geschrieben, soll Fett beendet werden.
Also der Satz "Ich bin +ein fetter+ Text" soll so aussehen "Ich bin ein fetter Text"
Ich habe es mit replace versucht, aber da werden alle + durch ersetzt.
Es müsste quasi ein flag auf false stehen und wenn einmal + mit ersetzt wurde auf true gestellt werden. Beim nächsten + wird es durch ersetzt und der Zeiger wieder auf false. Auch wenn im Text kein zweites + zum abschliessen kommt, sollte der Bold-Tag am Textende gesetzt werden.
Gibts da eventuell etwas brauchbares oder zumindest einen Tipp? Wäre furchtbar nett, da ich an dem Teil schon ewig sitz und nie klappt es...

Danke
 
Hm Danke.
Also meinst du, dass dabei Reguläre Ausdrücke weiterhelfen?
Leider hab ich davon keine Ahnung. Könntest du mir da evtl. ein Codebeispiel nennen?

Danke
 
Wäre auch leichter umzusetzen 😉
Aber die Chatter sind Gewohnheitstiere und kennen das so aus anderen Chats und wollen es so auch haben.
Aber mit den RegEx wird es wohl Jahre dauern, bis ich dahintergestiegen bin 🙁
 
Gast hat gesagt.:
Aber mit den RegEx wird es wohl Jahre dauern, bis ich dahintergestiegen bin 🙁
tja. wenn man es nicht versucht ... kein kommentar.

die grundlagen sind total easy. also ich habe sie noch nicht mit java verwendet, aber es sollten doch eigentlich zuuuu große unterschiede z.b. zu PHP sein.
hoffe ich mal ;-)
 
einfach geht es so:
Code:
        String s = "Das+ist ein fetter + Text + f + g";

        while ( s.indexOf( "+" ) != -1 ) {
            s = s.replaceFirst( "\\+", "[b]" );
            s = s.replaceFirst( "\\+", "[/b]" );
        }
        System.out.println( s );
    }
d.h. solange es noch + im string gibt ersetzte das erste durch , das zweite durch

Die methode ist aber nicht sehr elegant - ich weiß aber nicht ob und wenn ja wie Java backtracking erlaubt
 
Auch wenn die Methode vielleicht nicht elegant ist(?) funktioniert es super. Danke, deathbyaclown.
Gibt es denn noch eine Möglichkeit zu prüfen, dass wenn zwar gesetzt ist aber kein folgt, dennoch ein abschliessendes [/b] ans Stringende gesetzt wird?
Wenn nicht, muss ich dem String eben von Anfang an die Endtags zuweisen.
Danke

@Student, wer hat gesagt, dass ich es nicht versuche? PHP != Java und auch wenn es da nicht zuuuu große unterschiede gibt, versteht es vielleicht der eine besser/schneller als der andere. Selbst mit PHP hab ich meine Problem bei RegExp 😉
 
Gast hat gesagt.:
PHP != Java und auch wenn es da nicht zuuuu große unterschiede gibt, versteht es vielleicht der eine besser/schneller als der andere. Selbst mit PHP hab ich meine Problem bei RegExp 😉
die RegExp sind aber doch sicherlich vom grundaufbau nicht allzu unterschiedlich.

nunja .. ich persönlich denke eben, dass du nicht drum rumkommen wirst ;-)
 
nein die Regex sind im Sinne in jeder sprache gleich - die Verwendung ist unterschiedlich

Die Regexes in den verschiedenen Sprachen unterscheiden sich vorallem in der Mächtigkeit. Beispielsweise Zero-width-look-ahead wird man nicht in jeder Implementierung finden. Ausserdem ist die Syntax teilweise etwas unterschiedlich.
 
z.b. Capturing und Backreferences:

UltraEdit:
Capturing:
Code:
^( [0-9)^)
Backreference:
Code:
^1

Perl:
Capturing:
Code:
([0-9))
Backreference:
Code:
\1 oder $1

Java:
Capturing:
Code:
([0-9))
Backreference:
Code:
\1
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben