Elemente im StringBuffer ersetzen

chillerStudent

Bekanntes Mitglied
Hallo,

ich schreibe gerade ein Methode die zwei Strings als parameter hat und das eine das andere ersetzen soll.

Java:
StringBuffer sb = new Stringbuffer(); // im Stringbuffer ist schon was gespeichert.

void replace(String a, String b) {  // hier soll a durch b ersetzt werden

}
Wie kann ich a im StringBuffer suchen?
Hab leider im google nichts gefunden. Bitte um Hilfe.
 
Mit [c]indexOf()[/c] und [c]replace()[/c] kannst du arbeiten. Wenn du nur chars ersetzen musst, dann am besten mit [c]charAt()[/c] durch alles durch und [c]setCharAt()[/c] verwenden.
 
Ok. Danke.

Habe das so geschrieben:

Java:
void replace(String a, String b){
		for(int i=0; i<sb.length(); i++){
			if(sb.indexOf(a) == i){
				sb.replace(i, i, b);
				break;
			}
		}
	}

Er ersetzt irgendwie nicht. b steht immer noch da. Das a ist nun vor b geschrieben.
Wenn z.b. im Stringbuffer das hier gespeichert ist:
x
a
z

Dann schreibt gibt er das aus:
x
ba
z

Woran liegt das?
 
start - The beginning index, inclusive.
end - The ending index, exclusive.
str - String that will replace previous contents.

sb.replace(i, i, b); ist falsch. Nebenbei ist dein If unvollständig, denn nur weil der erste Buchstabe gleich ist, ist doch nicht gesagt, dass da auch wirklich der String folgt:
Im Buffer: "abcabchar" wenn du nun das wort "char" ersetzen willst (string), dann käme da sowas bei dir raus: "abstringabstringhar"
 
Habe das mit dem ersetzen jetzt irgendwie hinbekommen, indem ich die den Rest gelöscht habe.

Ich habe mal eine Frage:

Wie kann mann die Strings von einem StringBuffer in einem String Array packen?

Beispiel:

Im Stringbuffer stehen drei wörter (wörter?)

chiller
student
lernt

nun möchte ich mit einer forschleife die wörter in ein String Array packen:
Java:
String[] s = new String[sb.length);
for(int i=0; i<sb.length; i++){
 s[i] = ??  // gibt es eine methode dafür oder ist mein Ansatz völlig falsch?
}
 
Das heißt ich kann nur auf die einezelnen buchstaben zugreifen. Dann ist ja mein Ansatz falsch. :-(((
Wie kann ich überprüfen ob ein Wort enthalten ist?
 
Das ist meine methode für löschen eines wortes:

Java:
	void remove(String delete) {
		
		int a = delete.length() + sb.length();
		int b = a - (2 * delete.length());
		
		for(int z=0; z<sb.length(); z++) {
			if(z == sb.indexOf(delete)) {
				sb.delete(sb.length()-b, sb.length()-b+delete.length());
			}
		}
	}

Er überprüft nicht irgendwie nicht ob das String im Stringbuffer enthalten ist, sondern nur wo das erste mal ein Wort mit dem Anfangsbuchstaben von delete vorkommt. Dann löscht er dieses Wort im Stringbuffer. Egal ob es das gesuchte Wort ist oder nicht.
Wie schaffe ich es, dass er nach dem kompletten Wort sucht und exakt das gesuchte Wort löscht?

Wenn zum Beispiel im Stringbuffer steht

schönes bild
mappe
blätter

Wenn ich jetzt blätter löschen möchte, dann wird das wort bild gelöscht wegen dem gleichen Buchstaben.
 
Du brauchst keine Schleife. Und wenn, dann eine [c]while ((index = sb.indexOf(delete)) != -1) { ... }[/c]. Denn mit [c]indexOf()[/c] sucht man einen String.
 
Ok, bin jetzt ein bisschen näher gekommen.

Java:
void remove(String delete) {
        for(int z=0; z<sb.length(); z++) {
            if(z == sb.indexOf(delete)) {
                sb.delete(sb.indexOf(delete), sb.indexOf(delete)+delete.length());
            }
        }
    }

Nun hab ich das Problem, dass eine Leerzeile zu sehen ist, wo das Wort gelöscht wurde. Wie bekomme ich die Leerzeile weg?
Das Leerzeichen kommt von einer anderen methode, wo ich die String dem Stringbuffer hinzufüge.
 
Habe es geschafft, den Zeilenumbruch zu löschen.

Aber ich wollte statt das

Code:
chiller
        // Zeilenumbruch
student

das hier

Code:
chiller
student

und nicht das hier

Code:
chillerstudent

Habe es auch schon mit \r und line.seperator versucht.

kann mir jemand bitte weiterhelfen?
 
Zuletzt bearbeitet:
Dann lösche den Zeilenumbruch nicht, sondern ersetze ihn halt durch ein Leerzeichen.

funktioniert leider auch nicht.

Habe es mit folgenden funktionen versucht:

Code:
sb.insert(h, " "); // Endlosschleife
sb.replace(h, h, " "); // Endlosschleife
sb.setCharAt(h, ' '); // verbindet zeile mit zeile
sb.deleteCharAt(h); // verbindet zeile mit zeile

Ich werd noch wahnsinnig. Seit drei stunden sitze ich schon dran. ;(
 

Zurück
Oben