2015-06-11 2 views
7

Я создаю XML-файл для совершения платежей, и у меня есть ограничение на полное имя пользователя. Этот параметр принимает только символы алфавита (a-ZAZ) + whitespaces, чтобы разделить имена и фамилии.Как фильтровать строку Java для получения только символов алфавита?

Я не могу отфильтровать это в простой форме, как я могу создать регулярное выражение или фильтр, чтобы получить желаемый результат?

Пример:

'Carmen López-Delina Santos' должен быть 'Carmen LopezDelina Santos'

Мне нужно преобразовать гласные с украшениями в отдельных гласных звуков: а> а> а> а, и так далее; а также удалить специальные символы в виде точек, дефис и т. д.

Спасибо!

+5

Как '' O' становится O' и кстати '[A-Za-Z]' не покрывает 'O' – anubhava

+1

Мне нужно трансформировать гласные с украшениями в одиночные гласные следующим образом: á> a, à> a, â> a и т. Д. – EnriMR

+3

Это требование должно быть частью вашего вопроса не в комментариях. Также не забудьте показать свою попытку. – anubhava

ответ

12

Вы можете сначала использовать a Normalizer, а затем удалить нежелательные символы:

String input = "Carmen López-Delina Santos"; 
String withoutAccent = Normalizer.normalize(input, Normalizer.Form.NFD); 
String output = withoutAccent.replaceAll("[^a-zA-Z ]", ""); 
System.out.println(output); //prints Carmen LopezDelina Santos 

Обратите внимание, что это может не работать для всех и любой не-ASCII букв на любом языке - если такой случай встречается буква будет быть удалена. Одним из таких примеров является турецкий i.

Альтернатива в этой ситуации, вероятно, перечислить все возможные буквы и их замену ...

+1

Это именно то, что мне нужно, потому что система ожидает, что мой XML-файл не позволит использовать другой символ для поля имени – EnriMR

1

Вы можете использовать этот метод removeAccents с позже replaceAll с [^A-Za-z ]:

public static String removeAccents(String text) { 
    return text == null ? null : 
    Normalizer.normalize(text, Form.NFD) 
     .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
} 

Normalizer разлагает исходные символы в комбинацию базового символа и диакритического знака (это может быть несколько знаков на разных языках). á, é и í имеют одинаковые знаки: 0301 для с маркировкой ' акцент.

Правильное выражение \p{InCombiningDiacriticalMarks}+ будет соответствовать всем таким диакритическим кодам, и мы заменим их пустой строкой.

И в вызывающем:

String original = "Carmen López-Delina Santos"; 
String res = removeAccents(original).replaceAll("[^A-Za-z ]", ""); 
System.out.println(res); 

См IDEONE demo

Смежные вопросы