Zeichen aus String filtern

Hallo liebe Experten,
zur Zeit arbeite ich an einem Spiel.
http://www.haller-mtl.de/breakout/appletstart.html

Nach der Eingabe des Spielernamens sollen alle Zeichen, die keine Zahlen oder Buchstaben sind, aus dem Namen gefiltert werden.

Im Moment habe ich mir diese Lösung ausgedacht:

********************************

/**
* Gibt die übermittelte Zeichenkette zurück,
* nachdem daraus alle Sonderzeichen entfernt wurden.
* @param oldString Die ungefilterte Zeichenkette.
* @return Die Zeichenkette ohne Sonderzeichen.
*/
public static String getFilteredString(String oldString)
{
// Die Zeichenkette wird in einen StringBuffer verwandelt.
StringBuffer buffer = new StringBuffer(oldString);

// memory merkt sich die vergleichende Zeichenkette zu Testzwecken.
String memory = „“;

// position merkt sich die Position von einem Sonderzeichen.
int position;

// In dieser Schleife werden alle unerwünschten Zeichen
// aus dem String entfernt.
while (true)
{
// Die Zeichenkette in ihrer jetzigen Form wird sich gemerkt.
memory = buffer.toString();

// Unerwünschte Zeichen werden entfernt.
position = buffer.indexOf("~");
if (position != -1) buffer.deleteCharAt(position);
position = buffer.indexOf("[");
if (position != -1) buffer.deleteCharAt(position);
position = buffer.indexOf("]");
if (position != -1) buffer.deleteCharAt(position);
position = buffer.indexOf("(");
if (position != -1) buffer.deleteCharAt(position);
position = buffer.indexOf(")");
// usw. usw., mehr als 35 Zeichen.

// Wurde bei diesem Durchlauf kein Sonderzeichen mehr entfernt,
// wird die Schleife verlassen.
if (memory.equals(buffer.toString())) break;
}

// Aus dem Char-Array wird wieder eine Zeichenkette.
// Diese Zeichenkette wird zurück gegeben.
return buffer.toString();
}

***************************

Die Methode wird sehr groß, weil ich jedes Zeichen, dass ich vermeiden möchte, einzeln aufgelistet wird.
Gern würde ich eine elegantere Lösung finden.

Hat jemand eine Idee?

und tschüs
Uwe

Hi,

String name = „Test“;
String replaced = name.replaceAll("[\W]", „“);

teste es aber mal lieber :wink:

lg

georg

Hi,

String name = „Test“;
String replaced = name.replaceAll("[\W]", „“);

teste es aber mal lieber :wink:

und google mal nach Regular Expression. Diese Anweisung soll bedeuten „ersetze alles was kein Buchstabe,Zahl,Unterstrich ist durch nix“ (da muss evtl. noch ein * ran, kanns aber grad nicht probieren. (Geht aber erst seit Java 1.4)

Siehe auch http://java.sun.com/j2se/1.4.2/docs/api/java/util/re…

Micha

PS: Wenn du Java5 hast nimm StringBuilder statt StringBuffer wenn du nicht mit Threads arbeitest, ist schneller, kann das selbe.

1 „Gefällt mir“

Dafür ein Sternchen.
Hallo Georg,
sehr schön einfach und wirkungsvoll.

Vielen Dank für den Tipp.
Es funktioniert ausgezeichnet.

Dafür gibt es ein Sternchen.

und tschüs
Uwe

PS: Vielleicht hast du irgendwann Lust auf ein Spiel:
http://www.haller-mtl.de/breakout/appletstart.html

.

Danke, sehr hilfreich
Hallo Michael,
danke für die Erläuterungen.

Sie waren mir ein Sternchen wert.

und tschüs
Uwe