java将日文半角片假名转成全角的方法

转载 2009年09月25日 14:59:00

package samples.string.japanese;

public class StringUtil {

  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(c1) > 0) {
        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(c1) > 0) {
        switch (c1) {
        case 'ハ': return 'パ';
        case 'ヒ': return 'ピ';
        case 'フ': return 'プ';
        case 'ヘ': return 'ペ';
        case 'ホ': return 'ポ';
        }
      }
    }
    return c1;
  }
  /**
   *
   * @param QJstr 変換前の文字目
   * @return 変換後の文字
   */
  private static String B2Q(String QJstr){// 半角-->全角
      String outStr = "";
      String Tstr = "";
      byte[] b = null;

      for (int i = 0; i < QJstr.length(); i++) {
          try {
              Tstr = QJstr.substring(i, i + 1);
              b = Tstr.getBytes("unicode");
          } catch (java.io.UnsupportedEncodingException e) {
              e.printStackTrace();
          }
          if (b[3] == 0) {
              b[2] = (byte) (b[2] - 32);
              b[3] = -1;
              try {
                  outStr = outStr + new String(b, "unicode");
              } catch (java.io.UnsupportedEncodingException e) {
                  e.printStackTrace();
              }
          } else
              outStr = outStr + Tstr;
      }

      return outStr;
  }
  /**
   * 文字列中の半角カタカナを全角カタカナに変換します。
   * @param s 変換前文字列
   * @return 変換後文字列
   */
  public static String hankakuKatakanaToZenkakuKatakana(String s) {
    if (s.length() == 0) {
      return s;
    } else {
     s = B2Q(s);
     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("aaカ123"));
  }
}

关于java全角半角转换

//只针对英文和数字的全角和半角的转换class ChConvert { public static void main(String args[]) {  ChConvert test = new ...
  • dalie9
  • dalie9
  • 2006年06月15日 13:37
  • 1930

日文全角半角转化

  • 2013年03月28日 10:09
  • 66KB
  • 下载

java 日语全角半角的正则

全角半角在日本项目中比较常见,常见于カタカナ(片假名) String[] hankaku_katakana = { "ァ", "ア", "ィ", "イ...
  • u012601647
  • u012601647
  • 2017年02月20日 21:11
  • 811

将日文半角片假名转换成全角片假名

//区別文字列は、arrayである。注:対象は、全角/半角の片仮名と英語文字のみに限られている。function my_split($string){ $count = mb_strlen($stri...
  • senlin2684
  • senlin2684
  • 2007年06月13日 09:38
  • 1929

java全半角字符转换

/** * 全半角字符转换类 * 全角空格为12288,半角空格为32 特殊处理 * 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 * @aut...
  • hucong524579465
  • hucong524579465
  • 2013年01月22日 16:10
  • 411

java将日文半角片假名转成全角的方法

package samples.string.japanese;public class StringUtil {  private static final char[] HANKAKU_KATAK...
  • pttaag
  • pttaag
  • 2009年09月25日 14:59
  • 4241

日文全角半角混合字符串的字节数取得

 日语中全角半角混合入力的情况下,取得字节数的做法以Shift_JIS 和 UTF-8 为例   string s = "全角カタカナなら仮名半角"; ...
  • gishero
  • gishero
  • 2010年06月18日 10:32
  • 3174

如何理解python3的unicode,以及全角半角转换

关于unicode最易懂的解释(没有之一),建议耐心看完: 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 http://www.freebuf.com/articles/other...
  • zinnc
  • zinnc
  • 2017年03月30日 21:56
  • 2196

java中全角半角字符的相互转换

package com.whatycms.common.util; import org.apache.commons.lang.StringUtils; /** * * 提供对字符串的全角...
  • yaerfeng
  • yaerfeng
  • 2012年12月02日 19:07
  • 8470

Ruby中关于日文转UTF-8及半角全角转换的技巧

1.日文转UTF-8Iconv.new(cp932, utf-8)与Iconv.new(shift_jis, utf-8)的区别Iconv.new(shift_jis, utf-8)不支持以下的格式:...
  • kunshan_shenbin
  • kunshan_shenbin
  • 2009年05月25日 09:48
  • 733
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java将日文半角片假名转成全角的方法
举报原因:
原因补充:

(最多只允许输入30个字)