java.text.Normalizerで、normalizeと書くだけで実行出来ます。
以下、サンプル。変な文字使ってるので機種によって化けるかもしれません。ご了承ください。
import java.text.Normalizer;
public class Test {
public static void main(String[] args) throws Exception {
/****** 平仮名の「が」 ******/
// 正規分解とそれに続く正規合成
Normalizer.normalize( "が", Normalizer.Form.NFC );
// => が
// 正規分解
Normalizer.normalize( "が", Normalizer.Form.NFD );
// => か” (化けたので濁点は似たものに置き換え)
// 互換部品とそれに続く正規合成
Normalizer.normalize( "が", Normalizer.Form.NFKC );
// => が
// 互換分解
Normalizer.normalize( "が", Normalizer.Form.NFKD );
// => か” (化けたので濁点は似たものに置き換え)
/****** いろいろ実行してみる ******/
// 正規分解とそれに続く正規合成
Normalizer.normalize( "WGI壱ア〜−", Normalizer.Form.NFC );
// => WGI壱ア〜−
// 正規分解
Normalizer.normalize( "WGI壱ア〜−", Normalizer.Form.NFD );
// => WGI壱ア〜−
// 互換部品とそれに続く正規合成
Normalizer.normalize( "WGI壱ア〜−", Normalizer.Form.NFKC );
// => IVviii10壱ア~-
// 互換分解
Normalizer.normalize( "WGI壱ア〜−", Normalizer.Form.NFKD );
// => IVviii10壱ア~-
}
}
互換分解を使うと半角カナが全角になったり、ローマ数字がバラされたりします。使い道はいつも悩むけど、自分はなんとなくNFKCかけてることが多い気がする。