Javaを使用して、数字を半角/全角へ相互に変換する方法のサンプルプログラムと解説を紹介していきます。
環境
検証に使用した環境/ライブラリを以下に記載します。
- Java
- バージョン:11
サンプルプログラム
変換するためのサンプルプログラムを次に記載します。
半角数字を全角数字へ変換
半角数字を全角数字へ変換するサンプルプログラムになります。半角数字以外は、変換対象外になります。
/**
* 「半角数字」を「全角数字」へ変換処理を実施する。
*
* @param s 対象文字列
* @return 変換結果
*/
public static String toFullWidth(String s) {
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (0x30 <= c && c <= 0x39) {
sb.setCharAt(i, (char) (c + 0xFEE0));
}
}
return sb.toString();
}
全角数字を半角数字へ変換
全角数字を半角数字へ変換するサンプルプログラムになります。全角数字以外は、変換対象外になります。
/**
* 「全角数字」を「半角数字」へ変換処理を実施する。
*
* @param s 対象文字列
* @return 変換結果
*/
public static String toHalfWidth(String s) {
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (0xFF10 <= c && c <= 0xFF19) {
sb.setCharAt(i, (char) (c - 0xFEE0));
}
}
return sb.toString();
}
サンプルプログラム解説
解説するために重要なのは、Javaでは内部処理で扱う文字はすべてUTF-16といわれる文字コードを使用していることです。
半角数字/全角数字は、次のようにUTF-16の文字コードが整列して割り当てられています。このため、相互の変換処理は加減算で実現することができます。
数字 | 半角文字コード | 全角文字コード |
---|---|---|
0 | 0x30 | 0xFF10 |
1 | 0x31 | 0xFF11 |
2 | 0x32 | 0xFF12 |
3 | 0x33 | 0xFF13 |
4 | 0x34 | 0xFF14 |
5 | 0x35 | 0xFF15 |
6 | 0x36 | 0xFF16 |
7 | 0x37 | 0xFF17 |
8 | 0x38 | 0xFF18 |
9 | 0x39 | 0xFF19 |
数字の半角/全角文字コードの差は、すべて0xFEE0(65248)になります。このため、変換方法は次のようになります。
- 半角数字を全角数字に変換する場合は、元の文字列に0xFEE0を加算する。
- 全角数字を半角数字に変換する場合は、元の文字列に0xFEE0を減算する。
まとめ
数字の半角/全角を変換するためのサンプルプログラムと内容の解説を紹介しました。
参考
参考情報を次に記載します。
UTF-16の文字コード一覧表
半角数字は、https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFFを参考にしてください。
半角数字は、ページ内検索などで「0030」を検索してみてください。
全角数字は、https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_F000-FFFFを参考にしてください。
全角数字は、ページ内検索などで「FF10」を検索してみてください。