im String ersetzen, wenn...

magic_halli

Erfahrenes Mitglied
Hi,

ich habe einen String, der in etwa so aussehen kann:
Java:
String str = "sigma_v=sqrt(sigma^2+3*tau^2)";
Jetzt möchte ich in solch einem String bspw. 'sigma' ersetzen (z.B. durch einen Zahlenwert).
Es soll aber nur ersetzt werden, wenn links vom gefundenen Wort (wäre hier 'sigma') entweder ein Leerzeichen oder math. Zeichen ( +,-,*,/,(,),^ etc. ) UND rechts vom gefundenen Wort ebenfalls Leerzeichen, math.Zeichen, oder ein Stringende vorkommt
Hier in diesem Fall würde/sollte dann 'sigma' ersetzt werden, aber nicht das sigma von 'sigma_v'!
Wie ich ersetze weis ich. Mir geht es nur um das Überprüfen dieser Kriterien...

Wie kann ich das anstellen?

Danke und Gruß.
 
Hmm, ich würde zuerst das String mit StringTokenizer passend "zerstückeln".

z.B.
StringTokenizer tk = new StringTokenizer (str, "+ - * / ( ) ^");
Das Problem wäre dabei, dass du auch solche Schlüsselwörter wie "sqrt" abfangen musst.
In diesem Beispiel würdest du folgende Strings bekommen:
sigma_v=sqrt
sigma
2
3
tau

Nun weißt du, dass 1 String-Teil nicht ersetzt werden darf. Im nächsten Schritt prüfst du, ob es sich um eine Zahl handelt, wenn nicht, ob es ein Schlüsselwort ist, wenn nicht, ersetzen.
 
So, also ich komme irgendwie nicht weiter... ich kann mir zwar per StringTokenizer an den bestimmten Stellen den String zerlegen lassen, aber sobald ich eben per String.replaceAll() ersetzen will, ist es eigentlich völlig egal, wo und wie ich einen String aufsplitte - es wird eben einfach rücksichtslos ersetzt!
Bspw. wird eben auch in 'sigma_v' das sigma ersetzt, obwohl es ja für mich nichts mit 'sigma' zu tun hat, sondern ein eigenständiger Teilstring ist und somit auch unverändert bleiben soll!
Hat noch jemand ne Idee oder Vorschlag, wie ich mein Vorhaben erfolgreich umsetzen könnte?

Gruß.
 
naja, replaceAll ist ja schon aussagekräftig, was das wohl macht;)
wie gesagt, du könntest dir ja auch mal indexOf angucken, sollte dir helfen
 
Naja, Du darfst ja auch nicht einfach String.replaceAll() sagen, wenn Du nur ein bestimmtes Sigma ersetzen möchtest. Wenn Du den kompletten String mittels Tokenizer zerlegt hast, prüfst Du zunächst, ob ein komplettes Segment des Tokenizers nur mit 'sigma' gefüllt ist. Trifft dies zu, schaust Du Dir das Token davor und danach an und handelst nach Deinen Kriterien:
...Es soll aber nur ersetzt werden, wenn links vom gefundenen Wort (wäre hier 'sigma') entweder ein Leerzeichen oder math. Zeichen ( +,-,*,/,(,),^ etc. ) UND rechts vom gefundenen Wort ebenfalls Leerzeichen, math.Zeichen, oder ein Stringende vorkommt

Wobei das Leerzeichen beim Tokenizer ja wegfällt.....
 
Ist es vielleicht irgendwie möglich, ganz geziehlt auf einen Token zuzugreifen?
Ich kann mir ja mittels countTokens() die Anzahl der Tokens ermitteln. Jetzt würde ich gern auf bspw. Token Nummer 3 zugreifen, um diesen zu manipulieren.
 
Zurück