# Buchstabe aus String entfernen



## redbuttler (11. Dezember 2007)

Hallo,

gibt es eine Methode in Java, mit der ich einen einzelnen Buchstaben aus einem String löschen kann?

Danke schonmal

Grüße


----------



## lernen.2007 (11. Dezember 2007)

Hallo,

ob es eine direkte Methode gibt, weiß ich nicht. Aber im folgenden ist ein Code, da kannst du angegeben welche Buchstabe du in der String nicht haben willst. Vorteil ist dabei, wenn du in einem String z.B. lernen.2007 die Buchstabe "e" nicht haben willst. Dann entfernt es dir an zwei Stellen die Buchstabe "e".


```
public class BuchstabeAusString {

    /**
      * @param args
     */
    public static void main(String[] args) {
        String lernen = new String("lernen2007");
        String entferntBuchstabe = "e";
        
       char[] stringArray = lernen.toCharArray();
        String neueString = "";
        
        for(int i = 0; i < stringArray.length; i++) {
            
            if(String.valueOf(stringArray[i]).equals(entferntBuchstabe) == false) {
                neueString += String.valueOf(stringArray[i]).toString();
            }
        }
        System.out.println("Meine neue String ist: " + neueString);
    }

}
```

Andere Möglichkeit wäre dies:


```
//Andere Möglichkeit
		StringBuffer string = new StringBuffer("lernen2007");
		string.deleteCharAt(string.indexOf("e"));
		System.out.println("Die neue String ist: " + string);
```


----------



## fatum (12. Dezember 2007)

Ergänzungsvorschlag: So hätte man wieder alle "e" gelöscht und keinen Fehler, falls keines vorhanden wäre 


```
//Andere Möglichkeit
StringBuffer string = new StringBuffer("lernen2007");
int i;
while ((i=string.indexOf("e")) > -1)
    string.deleteCharAt(i);
System.out.println("Der neue String ist: " + string);
```


----------



## MeinerEiner_80 (12. Dezember 2007)

Moin!
Das Ganze geht auch ohne irgendwelche Selbstbauten:

```
String test = "eSeSase";
System.out.println(test.replaceAll("e","")); // entfernt alle "e"
```

*grüssle*
MeinerEiner


----------



## fatum (12. Dezember 2007)

*stirnklatsch*
Stimmt ja... völlig vergessen


----------



## redbuttler (12. Dezember 2007)

hallo, danke erstmal für die Antworten.

Ich möchte nämlich ein Programm schreiben, dass alle Umlaute aus einem String entfernt.

Also hier ist das Programm, aber so geht es noch nicht, der Compiler gibt mir 2 Fehlermeldungen zurück.


```
import javax.swing.*;
public class Aufgabe10 {
	
	static String stringRueckgabe(String string) {
		char [] charArray = new char['a','e','i','o','u'];
		 for(int i = 0;i<charArray.length;i++)
		 	if(charArray[i] == string.charAt(i)) str = str.replace("i","");
	}
		
    public static void main(String[] args) {
    	char [] string2 = JOptionPane.showInputDialog("Bitte einen String eingeben").toCharArray();
    	JOptionPane.showMessageDialog(null,"mit Vokalen:" + string2 + "\n" + "ohne Vokale:" + stringRueckgabe(string2));	
    }
}
```


----------



## Oliver Gierke (12. Dezember 2007)

Aha, und welche? Postet doch bitte die Exceptions immer mit. Bei Compilerfehlern ist es meistens sehr ersichtlich, was nicht stimmt. Auf Anhieb fällt mir auf, dass deine Statische Methode zwar einen Rückgabetyp deklariert ("String"), aber nirgendwo was zurückgibt. Da sollte die Compilermeldung allerdings sehr eindeutig sein. Wo ist denn das Problem genau?

REINHAUN!


----------



## redbuttler (12. Dezember 2007)

C:\Users\Kiefer\Documents\JCreator Pro\MyProjects\Aufgabe10\src\Aufgabe10.java:13: ']' expected
        char [] charArray = new char['a','e','i','o','u'];
                                        ^
C:\Users\Kiefer\Documents\JCreator Pro\MyProjects\Aufgabe10\src\Aufgabe10.java:13: <identifier> expected
        char [] charArray = new char['a','e','i','o','u'];


----------



## PoebelundGesocks (12. Dezember 2007)

du hast ein space(leerzeichen) zwischen "char" und "[]"
er erwartet aber, um das Feld als solches zu identifiezieren den Typ "char[]" damit sollte sich die fehler ham.


----------



## fatum (12. Dezember 2007)

Naja, ich meine, die Methode macht nicht, was du willst.
Du willst ja alle Umlaute aus dem String entfernen.
Meines Erachtens sollte es eher so aussehen (ich nehme mal gleich einen String-Array):


```
static String stringRueckgabe(String string) {
	String[] sar = { "a" , "e", "i", "o", "u" }; // Die zu ersetzenden Umlaute
	for (int i = 0; i < sar.length; i++)
		string.replaceAll(sar[i], "");
	return string; // doppelt gemoppelt, replaceAll ersetzt ja im String
}
```


LG


----------



## deepthroat (13. Dezember 2007)

Hi.





PoebelundGesocks hat gesagt.:


> du hast ein space(leerzeichen) zwischen "char" und "[]"
> er erwartet aber, um das Feld als solches zu identifiezieren den Typ "char[]" damit sollte sich die fehler ham.


Das ist falsch. Man darf dort soviele Leerzeichen machen wie man möchte. Der Fehler wird  bei "new char['a', 'b', ..]" beim ersten Komma angezeigt (kann man leider nicht erkennen, da redbuttler die Fehlermeldung einfach hier reingeklatscht hat statt ein Codetag zu verwenden...)


fatum hat gesagt.:


> ```
> string.replaceAll(sar[i], "");
> return string; // doppelt gemoppelt, replaceAll ersetzt ja im String
> ```


Strings in Java sind immutable (nicht änderbar) -- jedenfalls nicht ohne Tricks. Die Methode replaceAll kann den String nicht ändern, sondern gibt eine Kopie ohne die entsprechenden Zeichen zurück. Weiter solltest du beachten, das replaceAll das erste Argument als regulären Ausdruck betrachtet - d.h. das es ein paar Sonderzeichen gibt, die anders interpretiert werden. Und genau deswegen brauchst du in diesem Fall aber auch keine Schleife und noch nicht mal ein Array:
	
	
	



```
static String stringRueckgabe(String string) {
  return string.replaceAll("[aeiou]", "");
}
```

@redbuttler: Du meintest sicherlich Vokale statt Umlaute, oder?!

Gruß


----------



## fatum (13. Dezember 2007)

deepthroat hat gesagt.:


> Strings in Java sind immutable (nicht änderbar) -- jedenfalls nicht ohne Tricks. Die Methode replaceAll kann den String nicht ändern, sondern gibt eine Kopie ohne die entsprechenden Zeichen zurück. Weiter solltest du beachten, das replaceAll das erste Argument als regulären Ausdruck betrachtet - d.h. das es ein paar Sonderzeichen gibt, die anders interpretiert werden. Und genau deswegen brauchst du in diesem Fall aber auch keine Schleife und noch nicht mal ein Array:
> 
> 
> 
> ...


Mäh, natürlich: Strings in Java  - sorry, war gestern gedanklich nur halb bei Java *peinlich*
Und danke dass du an die Regex erinnerst, das vergess ich ständig...


----------



## Anime-Otaku (13. Dezember 2007)

Um mit einem String richtig zu verändern empfehlt sich die Benutzung eines StringBuffers oder Stringbuilder. Dort gibt es auch eine remove Methode^^.


----------

