Ü가 포함 된 문자열이 있다고 가정합니다. 모든 유니 코드 문자를 어떻게 찾을 수 있습니까? 코드를 테스트해야합니까? 내가 어떻게 그럴 수 있니?Java 문자열에서 유니 코드 문자를 어떻게 검색합니까?
예를 들어 "AÜXÜ"이라는 문자열이 있으면 "AYXY"로 변환하고 싶습니다. 나는 다른 유니 코드 문자들에 대해서도 똑같이하고 싶다. 나는 그들을 일종의 번역지도에 저장해야한다.
Ü가 포함 된 문자열이 있다고 가정합니다. 모든 유니 코드 문자를 어떻게 찾을 수 있습니까? 코드를 테스트해야합니까? 내가 어떻게 그럴 수 있니?Java 문자열에서 유니 코드 문자를 어떻게 검색합니까?
예를 들어 "AÜXÜ"이라는 문자열이 있으면 "AYXY"로 변환하고 싶습니다. 나는 다른 유니 코드 문자들에 대해서도 똑같이하고 싶다. 나는 그들을 일종의 번역지도에 저장해야한다.
"유니 코드 문자"의 정의는 모호하지만 취해야 할 사항은 다음과 같습니다. 표준 ISO 8859 charset에 포함되지 않은 UTF-8 문자를 의미합니다. 이 경우에 해당되면 문자열의 모든 문자를 반복하고 코드 포인트를 테스트하여 문자 세트 내에 있는지 확인하십시오.
또는 Map<Character, Character>
및 키와 일치하는 문자가있는지도의 문자를 사용하십시오. 예 :
Map<Character, Character> charReplacementMap = new HashMap<Character, Character>() {{
put('Ü', 'Y');
// Put more here.
}};
String originalString = "AÜAÜ";
StringBuilder builder = new StringBuilder();
for (char currentChar : originalString.toCharArray()) {
Character replacementChar = charReplacementMap.get(currentChar);
builder.append(replacementChar != null ? replacementChar : currentChar);
}
String newString = builder.toString();
또는 "발음 구별 부호가있는 모든 문자"를 의미합니까? 만약 그렇다면, 발음 부호를 제거하는 java.text.Normalizer
를 사용
/**
* Remove any diacritical marks (accents like ç, ñ, é, etc) from
* the given string (so that it returns plain c, n, e, etc).
* @param string The string to remove diacritical marks from.
* @return The string with removed diacritical marks, if any.
*/
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
한 함정
은 Ü는 당신이 계신 있다면 Y. 모르겠 음, U 될 것입니다. 발음 된 문자로 바꾸려면 매핑을 만들어야합니다. 물론 지루한 작업이지만,이 주제를 따라갈 필요가있는 시간보다 짧은 시간 안에 완료됩니다.다른 방법으로 돌아가서 문자가 ASCII 문자인지 물어볼 수 있습니다.
public static boolean isAscii(char ch) {
return ch < 128;
}
문자를 char로 분석해야합니다. 그냥 모든 비 ASCII를 교체하려는 경우 -
난 당신이 뭘 하려는지 귀하의 예제에서 확실하지 않다 (방법은 유용한 문자 방법의 부하를 포함 commons-lang Charutils에서이다) 0에서 127 범위를 벗어나는 코드 포인트를 찾는 문자열을 반복하여 해당 코드 포인트를 Y로 바꿀 수 있습니다.
에 대한 루프 그것은 "AÜXÜ"을 "AYXY"를 변환하여 얻은 정확히 나에게 명확하지 않다. 이것은 Ü가 특정 언어에서 Y와 같이 발음되기 때문에입니까? 어떤 언어? 그리고 다른 어떤 규칙들이 적용될 수 있습니까?
용어의 관점에서...
"a"
은 상기 유니 코드 문자열이다. 여기에는 단일 UTF-16 인코딩 된 문자가 포함됩니다.
영어 알파벳으로 문자의 범위를 제한하려면 Normalization performed in this answer을보십시오.
대체 예였습니다. 실제로 문자를'_XX_'로 대체합니다 :) – Geo
클래스 Character
도 몇 가지 흥미로운 방법을 제공합니다. 그것을 한번보세요.
Character.UnicodeBlock.of('a') == Character.UnicodeBlock.BASIC_LATIN; //true
Character.UnicodeBlock.of('�') == Character.UnicodeBlock.BASIC_LATIN; //false
Ü가지도없이지도에 매핑하는 방법을 어떻게 알 수 있습니까?간단한 매핑이없고 다른 언어로도 매핑이 다를 수 있습니다. – Mark
실제로 문자 하나 하나씩 살펴 봄으로써 할 수 있습니다. 그것은 char의 "range"에 달려 있지만 low level은 조용합니다. 이미이 작업을 수행하기위한 무언가가 있다고 가정합니다. http://en.wikipedia.org/wiki/Unicode을 참조하십시오. – Aif
해결책도 참조하십시오. https://rosettacode.org/wiki/Strip_control_codes_and_extended_characters_from_a_string#Java – Stan