Üを含む文字列があるとします。これらすべてのUnicode文字をどのように見つけるのですか?コードをテストする必要がありますか?どうすればいいですか?
たとえば、文字列「AÜXÜ」が与えられた場合、それを「AYXY」に変換したいと思います。他のUnicode文字についても同じことをしたいのですが、それらをある種の翻訳マップに保存する必要はありません。
「Unicode文字」の定義はあいまいですが、標準でカバーされていないUTF-8文字を意味すると解釈されます ISO 8859文字セット 。これが当てはまる場合は、文字列内のすべての文字をループし、そのコードポイントをテストして、指定された文字セット内にあるかどうかを判断します。
または、一致するキーを含む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}+", "");
}
1つの落とし穴、ÜはYではなくUになります。それがあなたが求めているものかどうかはわかりません。発音された文字に置き換えたい場合は、実際にマッピングを作成する必要があります。確かに、それは退屈な作業ですが、このトピックに従うのに必要な時間よりも短い時間で完了します。
文字列をループして、文字を呼び出すたびにループすることができます
If (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
// replace with Y
}
逆に行って、文字がアスキー文字かどうかを尋ねることもできます。
public static boolean isAscii(char ch) {
return ch < 128;
}
もちろん、文字列を文字ごとに分析する必要があります。
(メソッドは commons-lang CharUtils からのもので、便利なCharacterメソッドがたくさん含まれています)
「AÜXÜ」を「AYXY」に変換することで何が得られるのか、正確にはわかりません。これは、Üが特定の言語でYのように発音されるためですか?何語?そして、他にどのようなルールが適用される可能性がありますか?
用語に関して...
"a"
上記はUnicode文字列です。これには、UTF-16でエンコードされた単一の文字が含まれています。
文字の範囲を英語のアルファベットに制限したい場合は、 この回答で実行される正規化 を参照してください。
あなたの例からあなたが何をしようとしているのかわかりません-あなたがすべての非ASCII値をYで置き換えようとしているだけなら、0から127の範囲外のコードポイントを探す文字列をループすることができます、それらのコードポイントをYに置き換えます。
クラスCharacter
は、いくつかの興味深いメソッドも提供します。それを見てください。
Character.UnicodeBlock.of('a') == Character.UnicodeBlock.BASIC_LATIN; //true
Character.UnicodeBlock.of('�') == Character.UnicodeBlock.BASIC_LATIN; //false