JavaマスターJavaプログラムサンプル集文字列, 日本語処理のサンプル → 半角カタカナを全角カタカナに変換する

半角カタカナを全角カタカナに変換する

半角カタカナを全角カタカナに変換するメソッドを紹介します。

半角カタカナから全角カタカナへの変換時に問題になるのが、 濁点や半濁点記号の処理です。 このサンプルでは、濁点・半濁点記号が出現した際に、直前の文字に合成する処理を 行っています。

samples/string/japanese/HankakuKatakanaToZenkakuKatakana.java - Eclipse SDK
package samples.string.japanese;

public class HankakuKatakanaToZenkakuKatakana {

  private static final char[] HANKAKU_KATAKANA = '。''「''」''、''・',
      'ヲ''ァ''ィ''ゥ''ェ''ォ''ャ''ュ''ョ''ッ''ー''ア''イ',
      'ウ''エ''オ''カ''キ''ク''ケ''コ''サ''シ''ス''セ''ソ',
      'タ''チ''ツ''テ''ト''ナ''ニ''ヌ''ネ''ノ''ハ''ヒ''フ',
      'ヘ''ホ''マ''ミ''ム''メ''モ''ヤ''ユ''ヨ''ラ''リ''ル',
      'レ''ロ''ワ''ン''゙''゚' };

  private static final char[] ZENKAKU_KATAKANA = '。''「''」''、''・',
      'ヲ''ァ''ィ''ゥ''ェ''ォ''ャ''ュ''ョ''ッ''ー''ア''イ',
      'ウ''エ''オ''カ''キ''ク''ケ''コ''サ''シ''ス''セ''ソ',
      'タ''チ''ツ''テ''ト''ナ''ニ''ヌ''ネ''ノ''ハ''ヒ''フ',
      'ヘ''ホ''マ''ミ''ム''メ''モ''ヤ''ユ''ヨ''ラ''リ''ル',
      'レ''ロ''ワ''ン''゛''゜' };

  private static final char HANKAKU_KATAKANA_FIRST_CHAR = HANKAKU_KATAKANA[0];

  private static final char HANKAKU_KATAKANA_LAST_CHAR = HANKAKU_KATAKANA[HANKAKU_KATAKANA.length - 1];

  /**
   * 半角カタカナから全角カタカナへ変換します。
   @param c 変換前の文字
   @return 変換後の文字
   */
  public static char hankakuKatakanaToZenkakuKatakana(char c) {
    if (c >= HANKAKU_KATAKANA_FIRST_CHAR && c <= HANKAKU_KATAKANA_LAST_CHAR) {
      return ZENKAKU_KATAKANA[c - HANKAKU_KATAKANA_FIRST_CHAR];
    else {
      return c;
    }
  }
  /**
   * 2文字目が濁点・半濁点で、1文字目に加えることができる場合は、合成した文字を返します。
   * 合成ができないときは、c1を返します。
   @param c1 変換前の1文字目
   @param c2 変換前の2文字目
   @return 変換後の文字
   */
  public static char mergeChar(char c1, char c2) {
    if (c2 == '゙') {
      if ("カキクケコサシスセソタチツテトハヒフヘホ".indexOf(c10) {
        switch (c1) {
        case 'カ'return 'ガ';
        case 'キ'return 'ギ';
        case 'ク'return 'グ';
        case 'ケ'return 'ゲ';
        case 'コ'return 'ゴ';
        case 'サ'return 'ザ';
        case 'シ'return 'ジ';
        case 'ス'return 'ズ';
        case 'セ'return 'ゼ';
        case 'ソ'return 'ゾ';
        case 'タ'return 'ダ';
        case 'チ'return 'ヂ';
        case 'ツ'return 'ヅ';
        case 'テ'return 'デ';
        case 'ト'return 'ド';
        case 'ハ'return 'バ';
        case 'ヒ'return 'ビ';
        case 'フ'return 'ブ';
        case 'ヘ'return 'ベ';
        case 'ホ'return 'ボ';
        }
      }
    else if (c2 == '゚') {
      if ("ハヒフヘホ".indexOf(c10) {
        switch (c1) {
        case 'ハ'return 'パ';
        case 'ヒ'return 'ピ';
        case 'フ'return 'プ';
        case 'ヘ'return 'ペ';
        case 'ホ'return 'ポ';
        }
      }
    }
    return c1;
  }

  /**
   * 文字列中の半角カタカナを全角カタカナに変換します。
   @param s 変換前文字列
   @return 変換後文字列
   */
  public static String hankakuKatakanaToZenkakuKatakana(String s) {
    if (s.length() == 0) {
      return s;
    else if (s.length() == 1) {
      return hankakuKatakanaToZenkakuKatakana(s.charAt(0)) "";
    else {
      StringBuffer sb = new StringBuffer(s);
      int i = 0;
      for (i = 0; i < sb.length() 1; i++) {
        char originalChar1 = sb.charAt(i);
        char originalChar2 = sb.charAt(i + 1);
        char margedChar = mergeChar(originalChar1, originalChar2);
        if (margedChar != originalChar1) {
          sb.setCharAt(i, margedChar);
          sb.deleteCharAt(i + 1);
        else {
          char convertedChar = hankakuKatakanaToZenkakuKatakana(originalChar1);
          if (convertedChar != originalChar1) {
            sb.setCharAt(i, convertedChar);
          }
        }
      }
      if (i < sb.length()) {
        char originalChar1 = sb.charAt(i);
        char convertedChar = hankakuKatakanaToZenkakuKatakana(originalChar1);
        if (convertedChar != originalChar1) {
          sb.setCharAt(i, convertedChar);
        }
      }
      return sb.toString();
       }
    
  }

  public static void main(String[] args) {
    System.out.println(hankakuKatakanaToZenkakuKatakana("Javaプログラミング"));
  }
}

コマンド プロンプト

C:\JavaMaster\bin>java -cp . samples.string.japanese.HankakuKatakanaToZenkakuKatakana 
Javaプログラミング