私にÜを含む文字列があるとします。どのようにこれらのユニコード文字を見つけることができますか?私は彼らのコードをテストする必要がありますか?どうすればいい?Java文字列のUnicode文字を検出するにはどうすればよいですか?
たとえば、文字列「AÜXÜ」を指定すると、「AYXY」に変換したいと考えています。私は他のユニコード文字についても同じことをしたいと思いますし、ある種の翻訳マップにそれらを格納しなければならないのは嫌です。
私にÜを含む文字列があるとします。どのようにこれらのユニコード文字を見つけることができますか?私は彼らのコードをテストする必要がありますか?どうすればいい?Java文字列のUnicode文字を検出するにはどうすればよいですか?
たとえば、文字列「AÜXÜ」を指定すると、「AYXY」に変換したいと考えています。私は他のユニコード文字についても同じことをしたいと思いますし、ある種の翻訳マップにそれらを格納しなければならないのは嫌です。
「ユニコード文字」の定義は曖昧ですが、標準ISO 8859 charsetでカバーされていないUTF-8文字を意味します。これが当てはまる場合は、String内のすべての文字をループし、そのコードポイントをテストして、指定された文字セット内にあるかどうかを判断します。
また、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になります。発音された文字で置き換える場合は、実際にマッピングを作成する必要があります。確かに、それは面倒な作業ですが、このトピックに従う必要がある時間よりも短い時間で完了しています。あなたの文字列による
文字がアスキー文字かどうかを尋ねることができます。
public static boolean isAscii(char ch) {
return ch < 128;
}
文字列charを解析する必要があります。あなただけのすべての非ASCIIを交換しようとしている場合 -
私はあなたが何をしようとしてあなたの例からわからない(メソッドは、便利なキャラクター方法の負荷が含まれていcommons-lang Charutilsからです) 0から127の範囲外のコードポイントを探して文字列をループし、そのコードポイントをYに置き換えることができます。
のは、「AYXY」に「AÜXÜ」を変換することによって得られる、まさに私には明確ではありません。これは、Üが特定の言語でYのように発音されるためですか?何語?他にどんなルールが適用されるのでしょうか?
用語の面では...
"a"
上記のUnicode文字列です。これには、1つの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
実際には、文字を1つずつ見て行うことができます。それはcharの "範囲"に依存しますが、それは静かな低レベルです、そして、私はこのタスクを達成するための何かが既に存在すると仮定します。 http://en.wikipedia.org/wiki/Unicode – Aif
こちらのソリューションもご覧ください:https://rosettacode.org/wiki/Strip_control_codes_and_extended_characters_from_a_string#Java – Stan