2010-11-08 17 views
28

Bản sao có thể xảy ra:
Remove diacritical marks (ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ) from Unicode chars
Is there a way to get rid of accents and convert a whole string to regular letters?Java thay đổi áéőűú để aeouu

Làm thế nào tôi có thể làm điều này? Cảm ơn sự giúp đỡ

+1

trùng lặp: http://stackoverflow.com/questions/1453171/nnn-or-remove-diacritical-marks-from –

+0

Xem http://stackoverflow.com/questions/1453171/nnn-or-remove-diacritical -marks-từ – softveda

+0

@Greg đó là câu hỏi .net –

Trả lời

7

Đầu tiên - bạn không nên. Các ký hiệu này mang đặc tính ngữ âm đặc biệt mà không nên bỏ qua.

Cách chuyển đổi chúng là tạo ra một Map chứa mỗi cặp:

Map<Character, Character> map = new HashMap<Character, Character>(); 
map.put('á', 'a'); 
map.put('é', 'e'); 
//etc.. 

và sau đó lặp các ký tự trong chuỗi, tạo ra một chuỗi mới bằng cách gọi map.get(currentChar)

+5

+1 cho * bạn không nên * –

+1

+1 khác cho * không nên *. Một thay thế cho 'ä' trong tiếng Đức sẽ là "ae" (ngạc nhiên: hai ký tự ...) và tôi đặt cược có nhiều ví dụ hơn cho các ngôn ngữ nói khác. –

+2

@Andreas đúng, tôi đoán rằng sẽ gọi cho một chức năng Normalizer địa phương cụ thể (may mắn với điều đó :-)). –

9

Bạn có thể sử dụng java.text.Normalizer để tách các chữ cái và dấu phụ, sau đó loại bỏ chữ cái sau thông qua một regexp:

public static String stripDiacriticas(String s) { 
    return Normalizer.normalize(s, Form.NFD) 
     .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
} 
+0

Tôi đã sử dụng một cái gì đó tương tự như đã làm công việc: Pattern.compile ("\\ p {InCombiningDiacriticalMarks} +"). Matcher (nfdNormalizedString) .replaceAll (""); –

87

Tôi nghĩ rằng qu của bạn estion cũng giống như những:

và do đó câu trả lời cũng là như nhau:

String convertedString = 
     Normalizer 
      .normalize(input, Normalizer.Form.NFD) 
      .replaceAll("[^\\p{ASCII}]", ""); 

Xem

Ví dụ Code:

final String input = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ"; 
System.out.println(
    Normalizer 
     .normalize(input, Normalizer.Form.NFD) 
     .replaceAll("[^\\p{ASCII}]", "") 
); 

Output:

Đây là một String sôi nổi

01.235.
+0

+1, Câu trả lời hay. – aioobe

+1

may mắn thay tôi đã phải sao chép và dán nó từ một câu hỏi trước đó (bao gồm cả đoạn đầu tiên) :-) –

+0

Xin lỗi nhưng trong Android của nó, không chỉ java, lớp bình thường không có trong hệ thống android – lacas

Các vấn đề liên quan