Stringbearbeitung

Status
Nicht offen für weitere Antworten.

Fraiser

Mitglied
Hallo zusammmen

und zwar möche ich z.B. folgenden String:

fkt(testxy01=testz02)fkt(testyx03=testx04) alle testXXX durch einen anderen String beliebiger Länger ersetzen.

wie mach ich das am besten?

den split() müsste ich mit allen 3 Zeichen ( ) = durchführen und vordefinierte Wörter wie fkt ignorieren

rauskommen soll also

fkt(BLA01=BLA02)fkt(BLA03=BLA04) ....
 

EOB

Top Contributor
also ich wuerde regexe nehmen:

Code:
public class Test {
    
    /** Creates a new instance of Test */
    public Test() {
    }
    
    public static void main(String args[]){
        String s1 = "testxy01";
        System.out.println("testausgabe: " + s1);
        s1=s1.replaceAll("(test).*", "$1irgendwass");
        System.out.println("testausgabe: " + s1);
    }
    
}

meintest du das so?

gruesse
 

Fraiser

Mitglied
Mørketid hat gesagt.:
also ich wuerde regexe nehmen:

Code:
public class Test {
    
    /** Creates a new instance of Test */
    public Test() {
    }
    
    public static void main(String args[]){
        String s1 = "testxy01";
        System.out.println("testausgabe: " + s1);
        s1=s1.replaceAll("(test).*", "$1irgendwass");
        System.out.println("testausgabe: " + s1);
    }
    
}

meintest du das so?

gruesse


nicht ganz

Also ich muss in einer Zeichenkette, subStrings ersetzen.
Ich weiss von den Substrings nur, dass diese durch ( ) = oder bestimmte andere Substrings wie "fkt" voneinander getrennt sind.
Wenn ich so einen Substring gefunden habe, schick ich den an eine Datenbank, welche mir den zu String liefert, den
ich an diese Stelle schreiben soll.
Im endeffekt ein kleiner String-Parser.

so wird aus
fkt(blablabla=BLA)
fkt(hans=wurst)

Wobei der String noch viel länger sein kann.

Ich hoffe es ist eindeutiger!

Gruesse
 

EOB

Top Contributor
koennen denn mehrere splitter in einem string sein, also ( und = z.b. ? so ganz hab ichs noch nicht kapiert ???:L

gruesse
 

Fraiser

Mitglied
genau das ist das Problem, mit split() geht es meines erachtens nicht so ohne weiteres.
da man da immer nur ein "Trennzeichen" angeben kann.

man müsste den split() mehrfach durchführen, dann ist aber die Frage, wie man die Reihenfolge beibehält.
Für meinen Fall glaube ich nicht geeignet.

wie schon erwähnt, ich will aus

fkt(blablabla=BLA) das fkt(hans=wurst) machen

wobei ich nur weiss, dass die für mich wichtigen Daten nicht ( ) = oder Zeichenketten wie fkt sind


es gibt ja noch den StringTokenizer aber der liefert mir ja nur die Token

für Beispiel fkt(blablabla=BLA)

blablabla
BLA

diese könnt ich ersetzen, jedoch muss ich die ja dann wieder mit den Zeichen zusammenfügen, mit denen ich tokonized hab.

blablabla=>hand
BLA=>wurst

nach Ersetzung: fkt(hans=wurst)
 

EOB

Top Contributor
du willst also einen string an verschiedenen substrings splitten? in einem durchlauf?
 

EOB

Top Contributor
sowas:

Code:
replaceAll("(muster1|muster2|muster3)", "ersatz");

?
 

Fraiser

Mitglied
also NEIN, denk ich zumindest! :)

also nochmal

ich weiss nicht, welche meine zuersetzenden SubStrings in dem String sind

ich weiss nur, das diese mit Hilfe von ( ) = ... voneinander getrennt sind!

Und mein Problem ist diese SubStrings herauszufinden und in den UrsprungsString zu ersetzen

da kommt mir gerade eine Idee

Code:
String input ="...";
StringTokenizer token = new StringTokenizer(input, ",");   // hier müssten die ( ) = usw. rein

Vector<String> test = new Vector<String>();

for(int i=0; i< token.countTokens(); i++){
    test.addElement(token.nextToken());      
}

for(int i=0;i<test.length();i++)
{
    input.replace(test[i], holeAusDatenbankErsatzfuer(test[i]));
}

werd ich dann mal probieren.

Vielleicht gibts ja noch andere Ideen / Vorschläge.
 

Fraiser

Mitglied
Code:
import java.util.StringTokenizer;

public class Token {
	public static void main(String[] args) {
		String test ="fkt(test1=test2 and test3= test5)";
		StringTokenizer tokenizer = new StringTokenizer (test, "(,),=, ", false);
		
		while (tokenizer.hasMoreTokens ()) {
			test = test.replace(tokenizer.nextToken(),"...");
		}
		System.out.println(test);
	}
}

liefert:

Code:
...(...=... ... ...= ...)

soweit so gut,

jedoch müsste ich jetzt noch "fkt" in den StringTokenizer mit aufnehmen, aber wie?
reguläre Ausdrücke?

Grüße Fraiser[/quote]
 
S

SlaterB

Gast
nebenbei: "()= " reicht wohl auch an Stelle von "(,),=, " ,

man muss nicht mit Komma trennen,
wenn du das Komma reinnschreibst, wird auch nach dem Komma geteilt,

Vorsicht: beim StringTokenizer ist es eine einfache Aufzählung der Trennzeichen,
beim regulären Ausdrücken siehts anders aus
 

Fraiser

Mitglied
Ich werd es wohl für den Moment bei den Tokenizer mit "()= " belassen

Muss ich halt prüfen, ob die Ersetzung null liefert

Habs nun so gelöst und funktioniert für den Moment ganz gut:

Code:
StringTokenizer tokenizer = new StringTokenizer (text, "()= ><");
while (tokenizer.hasMoreTokens ()) {
    String alt = tokenizer.nextToken();
    String neu = getStringFromSQLFor(alt);			
    if(neu!=null) text = text.replace(alt,neu);
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben