# Akzentbuchstaben in akzentfreie Variante umwandeln



## BlackCraze (6. Mai 2008)

Hallo an alle,

ich muss in meiner Logik aus Vor- und Nachnamen einen Benutzernamen generieren.
Dabei sollen eventuelle Akzentbuchstaben in ihre jeweils akzentfreien Äqivalente umgewandelt werden. Gibt es dafür irgendetwas vorgefertigtes oder muss ich da wirklich für jede Möglichkeit alles ersetzen?


```
...
vorname = vorname.replaceAll("Â","A")
vorname = vorname.replaceAll("À","A")
vorname = vorname.replaceAll("Á","A")
...
```

Würde mir nicht so gut gefallen 
Hat jemand ne bessere Lösung parat?

Danke und MfG
Craze


----------



## SlaterB (6. Mai 2008)

zumindest wäre hier vielleicht günstiger, den String in ein char-Array zu überführen und char-weise zu vergleichen + zu ersetzen,

in beiden Varianten läßt sich der Code minimieren, wenn du zwei  Arrays hast mit alten chars/Strings + neuen chars/ Strings in passender Reihenfolge
-> mit Schleife verarbeiten


----------



## clemson (6. Mai 2008)

Hmm, irgendwie ist gerade die Apache Commons Seite down, allerdings kann ich mir gut vorstellen dass die sich da schon was überlegt haben...


----------



## BlackCraze (6. Mai 2008)

meinst du so?
ist zwar etwas schöner - aber irgendwie befriedigt mich das nicht so richtig. Kann mir nicht vorstellen, dass es dafür nichts fertiges gibt.

Aber danke erstmal 


```
public class StringHelper {

    public static String replaceAccents( String in ) {
        char[] fnChars = in.toCharArray();

        char[] from = { 'é', 'ú', 'í', 'ó', 'á', 'ý',//
                'è', 'ù', 'ì', 'ò', 'à', 'ý',//
                'ê', 'û', 'î', 'ô', 'â',//
                'É', 'Ú', 'Í', 'Ó', 'Á', 'Ý',//
                'È', 'Ù', 'Ì', 'Ò', 'À',//
                'Ê', 'Û', 'Î', 'Ô', 'Â' //
        };
        char[] to = { 'e', 'u', 'i', 'o', 'a', 'y',//
                'e', 'u', 'i', 'o', 'a', 'y',//
                'e', 'u', 'i', 'o', 'a',//
                'E', 'U', 'I', 'O', 'A', 'Y',//
                'E', 'U', 'I', 'O', 'A',//
                'E', 'U', 'I', 'O', 'A' //
        };

        for (int i = 0; i < fnChars.length; i++) {
            for (int j = 0; j < from.length; j++) {
                if (fnChars[i] == from[j]) {
                    fnChars[i] = to[(int) Math.floor( j )];
                }
            }
        }

        return new String( fnChars );
    }

}
```

::: EDIT :::
Das sind jetzt alle Akzentbuchstaben für die Akzente ´`^ in ISO-8859-1

Würde mir trotzdem für ne bessere Lösung interessieren - vor allem eine die UTF-Conform ist. Da sind ja noch wesentlich mehr Zeichen drin.


----------



## clemson (7. Mai 2008)

Wenn du Java 6 verwendest, könntest du auf den dort eingeführten Normalizer zurückgreifen...

Siehe auch: www.rgagnon.com/javadetails/java-0456.html


----------



## BlackCraze (14. Mai 2008)

schau ich mir mal an - danke für den Tipp


----------

