Javaで全角英字を半角英字へ変換するサンプルプログラムをご紹介します。
英数字に関しては、全角/半角で文字コード順が一致してので文字コードの加減算で変換が可能となります。
Javaソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/** * <p>[概 要] 全角英字⇒半角英字への変換</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param str 変換対象文字列 * @return 変換後文字列 */ public static String changeAlpFullToHalf(String str) { String result = null; if(str != null) { StringBuilder sb = new StringBuilder(str); for (int i = 0; i < sb.length(); i++) { int c = (int) sb.charAt(i); if ((c >= 0xFF21 && c <= 0xFF3A) || (c >= 0xFF41 && c <= 0xFF5A)) { sb.setCharAt(i, (char) (c - 0xFEE0)); } } result = sb.toString(); } return result; } |
JUnitサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@Test public void changeAlpFullToHalfTest() { // 期待値 String expected1 = "1234567890"; String expected2 = "abcdeABCDE"; String expected3 = null; // 準備 String param1 = "1234567890"; String param2 = "abcdeABCDE"; // 実行 String result1 = UtilSample1.changeAlpFullToHalf(param1); String result2 = UtilSample1.changeAlpFullToHalf(param2); String result3 = UtilSample1.changeAlpFullToHalf(null); // 検証 assertEquals("文字列1が一致していません。", expected1, result1); assertEquals("文字列2が一致していません。", expected2, result2); assertEquals("文字列3が一致していません。", expected3, result3); } |
📝 補足:実務で使う際の注意点と応用ヒント
本記事で紹介した changeAlpFullToHalf
メソッドは、全角の英字(A~Z/a~z)を半角に変換するシンプルなロジックであり、多くのケースで十分に有用です。とはいえ、実務で使う際には以下の点も考慮するとより安心・便利に運用できます。
✅ 注意点・改善ポイント
-
数字や記号の全角 → 半角変換は対象外
本メソッドは英字 (全角 A–Z, a–z) のみを対象としており、全角数字(0~9)や記号(全角 “!” “@” など)は変換しません。必要であれば、それらの Unicode 範囲も併せて処理する拡張が考えられます。 -
他言語(日本語/カタカナ等)との混在対応
日本語文字・全角カタカナ・ひらがな・CJK 文字などはこのロジックの対象外です。日本語混在文字列で処理を行う場合、変換対象を限定する、または事前に検証を行うことをおすすめします。 -
nullチェックと空文字対応
既に記事中にif (str != null)
チェックが入っていますが、空文字や長さ 0 の文字列の扱いも明示すると安全性が高まります。 -
高負荷文字列処理時のパフォーマンス
変換対象が非常に長い文字列や、大量処理を行う場面では、StringBuilder
を使う方式は妥当ですが、並列処理(ストリーム+マップ変換など)やバッファ再利用の検討も有効です。 -
JUnit(単体テスト)の拡張
現在のテスト例は基本ケースをカバーしていますが、異常系(極端に長い文字列、記号混在、Unicode 外文字を含む文字列など)に対するテストも追加しておくと安心です。
💡 応用例・拡張案
以下のような拡張を行うことで、より汎用性を高められます:
-
全角数字/記号をまとめて変換するメソッド追加
全角「0~9」「!」「?」「-」などを半角に変換するロジックを追加し、英字変換と併用する。 -
変換対象を正規表現でフィルタ
正規表現を使って「全角英字だけを含む文字列」などを検出し、該当部分のみを変換する。 -
逆変換機能(半角 → 全角)
必要に応じて、半角英字を全角へ戻す逆メソッドも実装しておく。 -
ユーティリティライブラリ化
複数プロジェクトで使える共通ユーティリティクラス(StringUtils や CharacterUtils)として整理しておくと管理しやすくなります。 -
サポートする文字セットの拡張
将来的に日本語/漢字などの正規化や、全角空白(全角スペース)→ 半角スペース変換などの機能を併せ持たせる。