0
필자는 분음 기호를 제거하는 3 가지 기능을 가지고 있으며, 그 중 하나를 Android 앱에서 사용합니다.안드로이드 (모든 버전)에서 분음 기호를 제거하는보다 안전한 기능
첫 번째는 안드로이드 2.2 이하에서 작동하지 않는다는 단점이 있습니다.
두 번째는 좋아 보이지만 다양한 기기에서 사용할 때 얼마나 안전 할 지 모르겠습니다.
분음 기호 만 처리해야 할 것이기 때문에 내가 작성한 세 번째 것은 배열 안에있는 것입니다.
이 기능은 10 바이트 이하의 작은 검색 문자열에 사용합니다. 검색은 내 앱의 주요 기능이므로 신뢰할 수있는 솔루션이 필요합니다. 두 번째 옵션이 모든 장치에서 실제로 작동합니까? FIRST
:
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
SECOND :
private static Map<Character, Character> MAP_NORM;
static {
MAP_NORM = new HashMap<Character, Character>();
MAP_NORM.put('á', 'a');
MAP_NORM.put('à', 'a');
MAP_NORM.put('ã', 'a');
MAP_NORM.put('â', 'a');
MAP_NORM.put('é', 'e');
MAP_NORM.put('ê', 'e');
MAP_NORM.put('í', 'i');
MAP_NORM.put('ó', 'o');
MAP_NORM.put('ô', 'o');
MAP_NORM.put('õ', 'o');
MAP_NORM.put('ú', 'u');
MAP_NORM.put('ü', 'u');
MAP_NORM.put('ç', 'c');
}
public static String removeAccents(String s) {
if (s == null) {
return null;
}
StringBuilder sb = new StringBuilder(s);
for(int i = 0; i < s.length(); i++) {
Character c = MAP_NORM.get(sb.charAt(i));
if(c != null) {
sb.setCharAt(i, c.charValue());
}
}
return sb.toString();
}
셋째 :
static Character charswap[] = {'á','a','à','a','ã','a','â','a','é','e','ê','e', 'í','i','ó','o','ô','o','õ','o','ú','u','ü','u','ç','c'};
public static String removeSWAP(String s) {
if (s == null) {
return null;
}
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < s.length(); i++) {
for (int k = 0; k < charswap.length; k+=2) {
if (s.charAt(i) == charswap[k]) {
sb.setCharAt(i, charswap[k+1]);
}
}
}
return sb.toString();
}
언어 및 지역 설정에 관계없이 모든 Android 기기에서 작동한다고 생각합니까? – Daniel
@Daniel - 언어 또는 지역 설정의 영향을받는 코드에는 아무 것도 표시되지 않습니다. 문자열에 기본 문자가 포함되어 있고 분음 기호를 별도의 문자 (예 :''á "또는'"\ u00e1 "'대신"a \ u0301 ")로 결합하면 문제가 발생할 수 있다고 생각합니다. 언어 나 지역이 아닌 문자열 생성 방법. 이러한 가능성을 보완하기 위해 위의 코드가 개별적으로 발생하는 경우 개별 결합 표시 자체를 건너 뛰도록 수정할 수 있습니다. –
이게 될까요? http://pastebin.com/FDJJ63Bq? – Daniel