Czy istnieje lepszy sposób na pozbycie się akcentów i przekształcenie tych liter na normalne oprócz używania metody String.replaceAll ()
i zastępowania liter jedna po drugiej? Przykład:
Dane wejściowe: orčpžsíáýd
Wyjście: orcpzsiayd
Nie musi zawierać wszystkich liter z akcentami, takimi jak alfabet rosyjski lub chiński.
1 odpowiedź
Użyj java.text.Normalizer, aby sobie z tym poradzić.
string = Normalizer.normalize(string, Normalizer.Form.NFD);
// lub Normalizer.Form.NFKD, aby uzyskać bardziej „kompatybilną” dekonstrukcję
To oddzieli wszystkie znaki akcentu od znaków. Następnie wystarczy porównać każdą postać z literą:
string = string.replaceAll("[^\\p{ASCII}]", "");
Jeśli twój tekst jest w standardzie Unicode, powinieneś użyć tego:
string = string.replaceAll("\\p{M}", "");
W przypadku Unicode \\ P {M
} dopasowuje glif podstawowy, a \\ p {M
} (małe litery) dopasowuje każdy akcent.