ubuntuusers.de

[Java] zweites Zeichen in einem String ersetzen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

dersven

Anmeldungsdatum:
16. August 2005

Beiträge: 792

Wohnort: Kreuzlingen, Schweiz

HI!

Ich mochte in einem String genau das zweite Zeichen ersetzen. nun sind aber zu beginn alle drei zeichen des Strings gleich:

1
String compareLinePart = "===";

Da ich keine Funktion gefunden hat, die an Position X ein zeichen resetzen kann, dachte ich mir, dass ich den String zunächst in einen Char-Array umwandle, danach dann die Operationen durchführe, und dann den Char-Array nach .toString in den String schreibe:

1
2
3
4
5
String compareLinePart = "===";
compareLinePart = "---"; // noch eine Operation dazwischen
char compareLinePartChars[] = compareLinePart.toCharArray();
compareLinePartChars[1]='|';
compareLinePart = compareLinePartChars.toString();

Heraus kommen allerdings nur sachen die in etwa so aussehen:

[C@5d0385c1

Woran liegt das, bzw wie kann ich es richtig machen? ich worde ja gerne direkt den String verändern (z.B. über compareLinePart[1]="|"). Aber das scheint in Java nicht zu gehen (zumindest meckert eclipse da)

Grüße und Danke.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Vorrede 1: Stings in Java sind immutable, d.h. Du kannst sie überhaupt nicht ändern.

Du kannst eine Methode auf einen String anwenden, die aus diesem einen neuen String produziert, und dies der Referenz zuweisen, z.B. so:

1
s = s.replaceAll ("(.).(.*)", "$1|$2");

An Ort und Stelle kannst Du den String nicht ändern:

1
s.replaceAll ("(.).(.*)", "$1|$2");

das verpufft im Nirgendwo.

Vorrede 2: Wenn Du viele Änderungen vornimmst, dann nimm lieber einen StringBuffer. Der ist für Änderungen entworfen. Bei Strings ist es umständlich und nicht performant.

Vorrede 3: C@5d0385c1 - da muß man nicht erschrecken, das ist wahrscheinlich ein Hashcode. Und wenn Du den mit System.out.print ... ausgegeben hast bestimmt nicht ein String, weil diese als String ausgegeben werden. Ein char-Array könnte dagegen so aussehen, wenn ausgegeben.

Obiger Beispielcode war übrigens schon eine mögliche Antwort:

1
System.out.println ("===".replaceAll ("(.).(.*)", "$1|$2"));

ergibt "=|=" als Ausgabe.
Mit regulären Ausdrücken muß man früher oder später eh Bekanntschaft schließen. Kurz erklärt: Das zweite Zeichen willst Du ersetzen, das erste und das/die folgende(n) erhalten.
Die runden Klammern fangen Ausdrücke ein, das erste Paar einen . Punkt, der ein Platzhalter für ein beliebiges Zeichen ist.
Mit $1 bezeichnet man dieses eingefangene Zeichen.
Den zweiten Punkt (ein bel. Zeichen) muß man nicht fangen, da er ersetzt werden soll. Punkt-Stern steht für ein beliebiges Zeichen, und davon beliebig viele (u. U. Null).

Aus "==" würde also "=|", aus "12345" würde "1|345" usw.

Mit StringBuffer sähe es z.B. so aus:

1
2
StringBuffer sb = new StringBuffer ("===");
System.out.println (sb.replace (1, 2, "|").toString ());

Antworten |