【Java】半角英数字を全角英数字に変換するサンプル(icu4j、自作)

Javaで業務システムやWebアプリケーションを開発していると、ユーザーが入力したデータに対して「半角英数字を全角英数字に統一したい」という要件が出てくることがあります。例えば、住所の番地や、特定のフォーマットが求められる帳票出力の際などです。

しかし、いざ実装しようとすると、Javaの標準ライブラリには「半角→全角」を一発で変換してくれる便利なメソッドが用意されていません。

そこで今回は、Javaで半角英数字を全角英数字に変換するための、実用的な2つのアプローチをご紹介します。

  1. 外部ライブラリ「icu4j」を使う方法(おすすめ)

  2. 自作メソッドで実装する方法

それぞれのサンプルコードと特徴を見ていきましょう。


1. 外部ライブラリ「icu4j」を使う方法(おすすめ)

最も簡単で確実なのが、IBMが開発に関わっている国際化対応ライブラリ「icu4j」を使う方法です。このライブラリには、様々な文字変換機能が含まれており、半角→全角変換も非常にシンプルに実装できます。

Maven依存関係の追加

まずは、プロジェクトに icu4j を導入します。Mavenを使用している場合は、pom.xml に以下の依存関係を追加してください。

XML

サンプルコード

icu4j を使った変換処理は、驚くほどシンプルです。

Java

実行結果:

解説: Transliterator.getInstance("Halfwidth-Fullwidth") で、半角を全角に変換するための変換器を取得し、transliterate メソッドに文字列を渡すだけです。英数字だけでなく、記号やカタカナなども適切に全角に変換してくれます。非常に強力で便利なライブラリです。


2. 自作メソッドで実装する方法

外部ライブラリを使いたくない場合や、変換対象を「英数字のみ」に限定したい場合などは、自作メソッドで実装することも可能です。

仕組み(Unicodeの差分を利用)

この方法では、文字コード(Unicode)の特性を利用します。 実は、半角英数字と全角英数字のUnicode値には、一定の差分(ズレ)があります。

  • 半角文字の「!」(U+0021)から「~」(U+007E)までの範囲

  • 全角文字の「!」(U+FF01)から「~」(U+FF5E)までの範囲

この間には、0xFEE0(10進数で65248) という一定の差があります。 つまり、半角文字の文字コードに 0xFEE0 を足してあげれば、対応する全角文字になるのです。(※ただし、半角スペースだけは例外的な位置にあるため、個別対応が必要です)

サンプルコード

以下が、Unicodeの差分を利用した自作変換メソッドの例です。

Java

実行結果:

解説: 文字列を1文字ずつチェックし、対象の半角文字であればUnicode値をずらして全角に変換しています。このコードでは英数字と記号を対象としていますが、if文の条件を変えることで「英数字のみ変換する」といったカスタマイズも可能です。


まとめ

Javaで半角英数字を全角に変換する2つの方法をご紹介しました。

  • 手軽に確実に変換したい場合: 外部ライブラリ icu4j がおすすめ。コードが非常にシンプルになります。

  • 外部ライブラリへの依存を避けたい場合: 自作メソッドで対応可能。Unicodeの仕組みを理解する必要がありますが、細かい制御が可能です。

プロジェクトの要件や環境に合わせて、最適な方法を選んでみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

email confirm*

post date*

「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

モバイルバージョンを終了