View Full Version : [Frage] String
Elisabeth
05-06-2003, 13:25
Ich hätte eine Frage: Wie kann ich einen Teil eines Strings durch einen anderen String ersetzten? Ich würde gerne einen substring aus einem String holen, ihn verändern und wieder in den String hineinsetzen. Ist das möglich? Wie programmier ich sowas?
lg
Elisabeth
Mit der substring Methode der String Klasse kannst Du die Teile extrahieren, welche Du beibehalten willst etwa so:
String test = "Teil1 Teil2 Teil3";
String teil1 = test.substring (0, 5);
String teil2 = test.substring (6,11);
String teil3 = test.substring (12,17);
String neu = teil1 + " " + "Mittlerer Teil" + " " + teil3;
Anstatt eines neu generierten Mittelteils kann man natürlich auch eine bearbeitete Version des teil2 nehmen. Dazu muss man aber dazu aus dem String teil2 einen StringBuffer Objekt machen, um zeichenweise Bearbeitungen durchführen zu können. Bei einem normalen String ist keine Veränderung möglich, das unterstützte nur der StringBuffer. Wie sieht denn die notwendige Verarbeitung aus ?
Als Beispiel würde Folgendes einfach nur blind den ersten Buchstaben von teil2 auf "+" setzten und das ganze String wieder zusammensetzten.
StringBuffer buf = new StringBuffer (teil2);
buf.setCharAt (0, '+');
String neu = teil1 + " " + buf.toString () + " " + teil3;
Du kannst das Zerlegen des Strings in drei Teile auslassen, und direkt den Inhalt verändern, wenn Du das gesamte String in einen StringBuffer umwandelst. Die Vorgehensweise hängt davon ab, wie komplex sich die Verarbeitung gestaltet.
Man kann das Ganze auch mit regex machen, diese Lösung wäre um einiges eleganter, da man den Suchvorgang bzw das Parsing auch gleich miteinbauen kann. Ein weiterer Vorteil wäre, daß keine absoluten Positionen innherhalb der Strings angeben werden müssen. Im Klartext bedeutet das, daß man ein Muster definiert, welches dem Format des Strings entspricht, und automatisch sich die einzelnen Teile extrahieren lassen kann falls vom Syntax passen, ohne eigentlich den Inhalt Zeichen für Zeichen durchsuchen zu müssen. Ist natürlich um einiges anspruchsvoller die Lösung, aber einfach schöner. Der Einsatz von regex könnte den gesamten Parsing Teil Deines Programms ersetzen und den Aufwand stark reduzieren.
Wie verhält sich das Problem konkret ? Welches Format hat das Ausgangs-String ?
lg
julian
Ad String:
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/String.html
Ad StringBuffer:
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/StringBuffer.html
Ad regex:
http://java.sun.com/j2se/1.4.1/docs/api/java/util/regex/package-summary.html
Unter Unix beliebtes Tool für Parsing-Zwecke und String-Manipulation.
Also Ich wuerde denn String mit einem Token Teilen.
Zum Beispiel wo ein Leerzeichen ist.
int count = 0;
char sep= ' ';
int index=0;
int endIndex = 0;
do
{
++count;
++index;
////Eingabe ist der Eingelesen String\\
index = Eingabe.indexOf(sep, index);
}
while(index != -1);
///SubStr ist der neue string\\\\
String[] subStr = new String[count];
index = 0;
for(i=0; i<count; i++)
{
endIndex = Eingabe.indexOf(sep, index);
if(endIndex == -1)
subStr[i] = Eingabe.substring(index);
else
subStr[i] = Eingabe.substring(index, endIndex);
index = endIndex +1;
}
So hab ich es in meinem Program gemacht:
siehe Ivor Hortom Beginning Java 2 seite 156
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.