本稿では、様々な文字変換を行ってくれる Java ライブラリ ICU4J (International Components for Unicode) について解説します。
ICU (International Components for Unicode) の概要
ICU (International Components for Unicode) は、Unicode の文字の変換を行ってくれるライブラリです。 ここで言う「文字の変換」とは、全角文字を半角に変換したり、逆に半角文字を全角文字にしたり、ひらがなをカタカナに、ひらがなをローマ字に変換したりするようなことです。
ICU は C言語版とJava版が開発されていますが、そのJava版が本稿で紹介する ICU4J になります。 ここではいくつかのサンプルプログラムを示して ICU4J の利用方法について紹介しますので、その利便性を知っていただければと思います。
ライブラリの入手/導入
ICU4J は、公式ホームページのダウンロードページからダウンロードすることができます。
またプロジェクトで Maven を利用していれば、pom.xml に依存関係を追加することで利用することもできます。 現時点での最新のバージョンについてはこちらで確認できますが、pom.xml に追記する記述は以下の通りです。
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>55.1</version>
</dependency>
サンプルプログラム
それではさっそく、変換方法の種別ごとにサンプルプログラムを示します。
全角→半角
まずは全角を半角に変換する方法です。 次のサンプルプログラムのように、半角文字を含む文字列の変換を行ってくれます。
Transliterator transliterator = Transliterator.getInstance("Fullwidth-Halfwidth");
String result = transliterator.transliterate("アイウガギグ123①¥%$");
System.out.println(result);
[結果]
アイウガギグ123①¥%$
上のサンプルにわざと対応する半角文字がないと思われる「①」という文字を入れてみました。 結果の通り「①」という文字は変換が行われません。 作るシステムで「①」を「(1)」に変換するなどの要件がある場合は、IUJ4Jを利用する前後で自力でやる必要がありそうです。
また知っておいて頂きたいのは Java 1.6 以降で利用できるようになった java.text.Normalizer クラスの存在です。 java.text.Normalizer クラスを利用すれば、全角英数字であれば半角に変換することができます。 どのような文字種類を変換するのかを気にした上で、ICU4J と Normalizer クラスを使い分けた方が良いでしょう。
半角→全角
次は半角→全角の変換です。 Transliterator の getInstance の引数を変更しています。
Transliterator transliterator = Transliterator.getInstance("Halfwidth-Fullwidth");
String result = transliterator.transliterate("アイウエオガギグゲゴ");
System.out.println(result);
[結果]
アイウエオガギグゲゴ
カタカナ→ひらがな
カタカナをひらがなに変換することもできます。 次の例のように、カタカナは全角でも半角のどちらからでも対応しています。
Transliterator transliterator = Transliterator.getInstance("Katakana-Hiragana");
String result = transliterator.transliterate("アイウエオガギグゲゴ アイウエオガギグゲゴ");
System.out.println(result);
[結果]
あいうえおがぎぐげご あいうえおがぎぐげご
ひらがな→カタカナ
ひらがなを全角カタカナに変換することもできます。
Transliterator transliterator = Transliterator.getInstance("Hiragana-Katakana");
String result = transliterator.transliterate("あいうえおがぎぐげご");
System.out.println(result);
[結果]
アイウエオガギグゲゴ
ひらがな→ローマ字
ひらがなをローマ字に変換することもできます。 但し小文字のローマ字に変換されるので、大文字にする必要があればもう一段階の変換が必要です。
Transliterator transliterator = Transliterator.getInstance("Hiragana-Latin");
String result = transliterator.transliterate("あいうえおがぎぐげご");
System.out.println(result);
[結果]
aiueogagigugego
おわりに
いかがだったでしょうか? ICU4J の便利さが伝わったでしょうか? 文中でも述べた通り java.text.Normalizer クラスと上手く使い分けて、プロジェクトで利用してみてください
更新履歴
- 2014年08月03日 – 初稿を執筆しました。
- 2015年09月07日 – 誤った表現を修正し、文章を再構成しました。