# String einzelne Buchstaben ersetzen



## .x (28. Okt 2012)

Hallo!
Folgendes Problem, wollte zur Übung zu Strings mir ein kleines Programm schreiben.
Das Programm sollte einem String bestimme Buchstaben "abschneiden" (Hier die Buchstaben "a,e,i,o,u")
Soweit so gut, habe mir die Methoden der String-Klasse zu nutze gemacht und komme nun nicht weiter. 

Die Idee war es in einer If-Abfrage einen Vergleich auf die einzelnen Buchstaben zu machen und diese dann mit String.replace(oldchar, newchar) zu ersetzen, was allerdings nicht klappt.

Bestimmt ist es etwas offensichtliches, aber ich sitze bereits seit einer Stunde davor und komme auf keinen grünen Zweig. :/

Anbei der Code.


```
package kap6;

public class String_Übungen {

	String m_text;
	String ersetzt;
	
	
	public String_Übungen(String text)
	{
		int index = 0;
		char a = 'a', e = 'e', i = 'i', o = 'o', u = 'u';
		char leer = 'c';
		m_text = text;
		
		
		for(index = 0; index < text.length(); index++)
		{
			text.charAt(index);
			if(text.charAt(index) == a || text.charAt(index) == e || text.charAt(index) == i || text.charAt(index) == o || text.charAt(index) == u )
			{
				text.replace(text.charAt(index), leer);
				text.trim();
			}	
//			System.out.println("Position: " + index + " Buchstabe: " + text.charAt(index));
			System.out.println(text);
		}
		System.out.println(text);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String_Übungen test = new String_Übungen("abcdefghi");
		System.out.println(test);
	}

}
```


----------



## pro2 (28. Okt 2012)

Das Problem ist folgendes:
Die Klasse String ist immutable. Das heißt, sie ist unveränderbar. Deswegen gibt diese Methode "replace" immer einen neuen String zurück. Du musst also jedes Mal sagen:


```
string = string.replace(...);
```

Besser arbeitet man bei solchen Probleme daher mit der Klasse StringBuilder.


----------



## hüteüberhüte (28. Okt 2012)

.x hat gesagt.:


> Hallo!
> Folgendes Problem, wollte zur Übung zu Strings mir ein kleines Programm schreiben.
> Das Programm sollte einem String bestimme Buchstaben "abschneiden" (Hier die Buchstaben "a,e,i,o,u")



So auf die Schnelle:

```
public static void main(String[] args) {
        String s = "abcdefghi";
        s = s.replaceAll("[aeiou]+", "");
        System.out.println("s = " + s);
    }
```

lg


----------



## hüteüberhüte (29. Okt 2012)

Aber wahrscheinlich war eher so etwas gemeint:

```
public static String replaceA(String s) {
        StringBuilder builder = new StringBuilder(s.length());
        for (char c : s.toCharArray()) {
            if (!(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')) {
                // builder...
            }
        }
        return builder.toString();
    }

    public static String replaceB(String s) {
        StringBuilder builder = new StringBuilder(s.length());
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (!(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')) {
                // builder...
            }
        }
        return builder.toString();
    }

    public static void main(String[] args) {
        System.out.println("abcdefghi".replaceAll("[aeiou]+", ""));
        System.out.println(replaceA("abcdefghi"));
        System.out.println(replaceB("abcdefghi"));
    }
```

Da kann man sich aussuchen, was eher zusagt. Ich weiß nicht genau, wie schnell/langsam .toCharArray() ist, deshalb auch Variante B.

Btw. 
	
	
	
	





```
!(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
```
 ist dasselbe wie 
	
	
	
	





```
c != 'a' && c != 'e' && c != 'i' && c != 'o' && c != 'u'
```

[JAVA=5]// builder...[/code] musst du noch ergänzen.

Hth


----------



## .x (29. Okt 2012)

Danke für die Antworten habs hinbekommen 

Für die, die es interessiert wie ich es gelöst hab.


```
package kap6;

public class String_Übungen {

	static String m_text;
	String ersetzt;
	
	
	public static String String_Übungen(String text)
	{
		int index = 0;
		m_text = text;
		char[] c = new char[text.length()];
		int inside = 0;
		
		
		for(index = 0; index < text.length(); index++)
		{
		char buchstabe = text.charAt(index);
		
		if("aeiouAEIOU".indexOf(buchstabe) >= 0)
			continue; // Wird continue ausgelassen, werden nur die nur genau die Zeichen angezeigt wie in der if bedingung aufgelistet
			c[ inside++ ] = buchstabe;
		
			
//			System.out.println("Position: " + index + " Buchstabe: " + text.charAt(index));
//			System.out.println(text);
		}
		System.out.println(text);
		
		return new String(c, 0 , inside); // Gebe neuen String zurück, da Strings "immutable" sind.
	}

	public static void main(String[] args) {

	
		System.out.println(String_Übungen("Hallo! Das ist ein Teststring wo sehr viel Mist steht. Oben ist er lesbar unten aber nicht mehr!!"));
	}

}
```


----------

