Forum: PC-Programmierung Java STX und ETX aus String ersetzen


von Eumel2 (Gast)


Lesenswert?

Hi,

wie bekomme ich denn aus einem String ein ETX (03) und STX (02) raus.

Ein

if(derString.contains("\03")) ... funktioniert ja, aber austauschen 
lässt sich das nicht ... auf die Schnelle ;-)


Eumel2

von Robert L. (lrlr)


Lesenswert?

google sagt:

derString.replaceAll("alt", "neu")

von Udo S. (urschmitt)


Lesenswert?

Robert L. schrieb:
> derString.replaceAll("alt", "neu")

Wobei ein String immer immutable ist.
Man muss dann also schon den neuen Rückgabestring seiner Variablen 
zuweisen.
Ausserdem sollte man beachten, das der erste Parameter eine Regular 
Expression ist.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Eumel2 schrieb:
> aber austauschen
> lässt sich das nicht
1
String neuerString = derString.replace('\3', 'a')

von Robert L. (lrlr)


Lesenswert?

(dank GC)

kann man ja (bedenkenlos)

derString = derString.replace('\3', 'a')

oder ?

von Udo S. (urschmitt)


Lesenswert?

Robert L. schrieb:
> kann man ja (bedenkenlos)
>
> derString = derString.replace('\3', 'a')
>
> oder ?

Man kann nicht nur man muss sogar wenn die Werte in dem 'selben' String 
geändert werden sollen.
Suche nach "String" und "immutable" im Java Buch deines Vertrauens.
Das sind elementarste Grundlagen in der Stringverarbeitung in Java.

von Eumel2 (Gast)


Lesenswert?

Moin, vielen Dank für Eure Antworten. Alles richtig und ich war heute 
morgen wohl noch zu müde ;-)

Noch eine Frage: da ein String ja final ist, wird mittels

derString = derString.replace('\3', 'a')

ja ein neues Object (mit identischen Namen) angelegt. Das alte wird wohl 
irgendwann vom GC erlegt.

Nun kommt dieser Austausch von Zeichen vier Mal pro Sekunde vor. Unter 
Umständen stört dann irgendwann der GC meine periodische 
Messwerterfassung. Das muss doch eleganter gehen - oder?


Eumel2

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Eumel2 schrieb:
> ja ein neues Object (mit identischen Namen) angelegt

Nein, Objekt != Referenz. Ein Objekt hat keinen Namen. Die Referenz mit 
dem Namen derString wird das neue Objekt zugewiesen. Das alte wird 
möglicherweise von der GC gelöscht falls es nirgends mehr referenziert 
wird.

Eumel2 schrieb:
> Nun kommt dieser Austausch von Zeichen vier Mal pro Sekunde vor
> Unter Umständen stört dann irgendwann der GC meine periodische
> Messwerterfassung
Auf einem 386er mit 2MB RAM sicherlich...

Eumel2 schrieb:
> Das muss doch eleganter gehen

Was ist daran "unelegant"? Es hält dich natürlich niemand ab die ganze 
Stringverarbeitung selbst auf einem chararray durchzuführen falls du das 
"eleganter" findest...

von Udo S. (urschmitt)


Lesenswert?

Eumel2 schrieb:
> Noch eine Frage: da ein String ja final ist, wird mittels
>
> derString = derString.replace('\3', 'a')
>
> ja ein neues Object (mit identischen Namen) angelegt. Das alte wird wohl
> irgendwann vom GC erlegt.

So wird wohl enden.

Eumel2 schrieb:
> Nun kommt dieser Austausch von Zeichen vier Mal pro Sekunde vor. Unter
> Umständen stört dann irgendwann der GC meine periodische
> Messwerterfassung. Das muss doch eleganter gehen - oder?

Es gibt auch die Klasse StringBuffer
Manche nehmen auch einfach ein char[xxx].

Nachtrag
Ooops Läubi hat natürlich recht. Es wird kein Objekt identischen Namens 
angelegt, sondern einfach ein neuer String mit dem geänderten Inhalt und 
"derString" zeigt auf dieses neue Objekt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.