# Problem mit Anführungszeichen



## texton (20. Jan 2009)

Ich habe folgenden Testcode:

```
public static void main( String[] args )
	{
		String s = "user=\"%username\"";
		System.out.println( s );
		System.out.println( s.indexOf( "\"" ) );
		s.replace( "\"", "\'" );
		System.out.println( s );
	}
```
Leider ist die Ausgabe nicht wie erwartet:

```
user="%username"
5
user="%username"
```
Wie kann ich sicher die im String zusätzlich vorhandenen doppelten Anführungszeichen in einfache umwandeln?

Hintergrund: Der String ist als Parameter für einen Befehl gedacht, der über exec() ausgeführt wird.


----------



## SlaterB (20. Jan 2009)

> s.replace(..); 

-> 

s =  s.replace( ... );


----------



## Der Müde Joe (20. Jan 2009)

replace gibt einen neuen String zurück und läuft nicht auf den selben String..
-->
String neu = s.replace('\"','\'');

EDIT:
zu langsam
By the way:
Strings sind immutable (unveränderlich), darum gibts bei allen Stringoperationen einen neuen String zurück


----------



## texton (20. Jan 2009)

Das ein neues String-Objekt geschaffen wird, ist im Beispiel nicht weiter schlimm. Und wie vielleicht aufgefallen ist, habe ich bereits replace verwendet. Wie vielleicht auch aufgefallen ist in der Ausgabe, findet Java tatsächlich an Index 5 ein doppeltes Anführungszeichen, bekommt im Code die Aufgabe, es durch ein einfaches auszutauschen -- in der letzten Ausgabe sieht man aber, dass intern von Java die einfachen Zeichen wieder rückgewandelt wurden. Wohl gemerkt: Der String ist nicht nur 

```
"%username"
```
sondern

```
user="%username"
```


----------



## ARadauer (20. Jan 2009)

was soll den raus kommen?

```
String s = "user=\"%username\""; 
         System.out.println( s ); 
         System.out.println( s.indexOf( "\"" ) ); 
         s = s.replace( "\"", "\'" ); 
         System.out.println( s );
```
liefert



> user="%username"
> 5
> user='%username'


----------



## Murray (20. Jan 2009)

texton hat gesagt.:
			
		

> Das ein neues String-Objekt geschaffen wird, ist im Beispiel nicht weiter schlimm.


Stimmt. Schlimm (beziehungsweise ursächlich für das Nichtfunktionieren) ist aber, dass dieses neue Objekt (welches den korrekten Inhalt hat) nicht verwendet wird.


----------



## SlaterB (20. Jan 2009)

>  in der letzten Ausgabe sieht man aber, dass intern von Java die einfachen Zeichen wieder rückgewandelt wurden.

kühne Behauptung.., ohne Beleg? 
ist es nicht viel wahrscheinlicher, dass einfach gar keine Umwandlung stattgefunden hat?!


----------



## texton (20. Jan 2009)

Oh Mann, ich Dummy! 

Ja natürlich, es muss ja

```
s=s.replace ...
```
heißen.

Danke an alle


----------



## texton (20. Jan 2009)

Oh Mann, ich Dummy! 

Ja natürlich, es muss ja

```
s=s.replace ...
```
heißen.

Danke an alle


----------



## Leroy42 (21. Jan 2009)

Murray hat gesagt.:
			
		

> Stimmt. Schlimm (beziehungsweise ursächlich für das Nichtfunktionieren) ist aber, dass dieses neue Objekt (welches den korrekten Inhalt hat) nicht verwendet wird.



LOL!!


----------

