关闭

关于java全角半角转换

1862人阅读 评论(3) 收藏 举报

//只针对英文和数字的全角和半角的转换

class ChConvert {

 public static void main(String args[]) {
  ChConvert test = new T2();
  System.out.println(test.toDBCS("ABCDE"));
 }

 /**
  * 半角→全角
  *
  * @param str
  * @return
  */
 public String toDBCS(String str) {

  if (str == null) {
   return "";
  }
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < str.length(); i++) {
   int c = str.charAt(i);

   if ((c >= 'a') && (c <= 'z')) {

    c = (c + 'a') - 'a';

   } else if ((c >= 'A') && (c <= 'Z')) {
    c = (c + 'A') - 'A';

   } else if ((c >= '0') && (c <= '9')) {
    c = (c + '0') - '0';

   }
   sb.append((char) c);
  }
  return sb.toString();
 }
 /**
  * 全角→半角
  * @param str
  * @return
  */
 public String toSBCS(String str) {
  if (str == null) {
   return "";
  }

  StringBuffer sb = new StringBuffer();

  for (int i = 0, n = str.length(); i < n; i++) {
   int c = str.charAt(i);
   if ((c >= 'A') && (c <= 'Z')) {
    c = (c + 'A') - 'A';

   } else if ((c >= '0') && (c <= '9')) {
    c = (c + '0') - '0';

   } else if ((c >= 'a') && (c <= 'z')) {
    c = (c + 'a') - 'a';
   }
   sb.append((char) c);
  }
  return sb.toString();
 }
}

 

 

//包含对日语全角半角,平假名片假名的转换

public class Temp {

 /**
  * 日本語特有の文字変換を行うクラス
  *
  * @author G
  */


  // 半角カタカナ<-->全角カタカナ変換テーブル
  private static final String kanaHanZenTbl[][] = {
   // 2文字構成の濁点付き半角カナ
   // 必ずテーブルに先頭に置いてサーチ順を優先すること
   { "ガ", "ガ" }, { "ギ", "ギ" }, { "グ", "グ" }, { "ゲ", "ゲ" }, { "ゴ", "ゴ" },
   { "ザ", "ザ" }, { "ジ", "ジ" }, { "ズ", "ズ" }, { "ゼ", "ゼ" }, { "ゾ", "ゾ" },
   { "ダ", "ダ" }, { "ヂ", "ヂ" }, { "ヅ", "ヅ" }, { "デ", "デ" }, { "ド", "ド" },
   { "バ", "バ" }, { "ビ", "ビ" }, { "ブ", "ブ" }, { "ベ", "ベ" }, { "ボ", "ボ" },
   { "パ", "パ" }, { "ピ", "ピ" }, { "プ", "プ" }, { "ペ", "ペ" }, { "ポ", "ポ" },
   { "ヴ", "ヴ" },
   // 1文字構成の半角カナ
   { "ア", "ア" }, { "イ", "イ" }, { "ウ", "ウ" }, { "エ", "エ" }, { "オ", "オ" },
   { "カ", "カ" }, { "キ", "キ" }, { "ク", "ク" }, { "ケ", "ケ" }, { "コ", "コ" },
   { "サ", "サ" }, { "シ", "シ" }, { "ス", "ス" }, { "セ", "セ" }, { "ソ", "ソ" },
   { "タ", "タ" }, { "チ", "チ" }, { "ツ", "ツ" }, { "テ", "テ" }, { "ト", "ト" },
   { "ナ", "ナ" }, { "ニ", "ニ" }, { "ヌ", "ヌ" }, { "ネ", "ネ" }, { "ノ", "ノ" },
   { "ハ", "ハ" }, { "ヒ", "ヒ" }, { "フ", "フ" }, { "ヘ", "ヘ" }, { "ホ", "ホ" },
   { "マ", "マ" }, { "ミ", "ミ" }, { "ム", "ム" }, { "メ", "メ" }, { "モ", "モ" },
   { "ヤ", "ヤ" }, { "ユ", "ユ" }, { "ヨ", "ヨ" },
   { "ラ", "ラ" }, { "リ", "リ" }, { "ル", "ル" }, { "レ", "レ" }, { "ロ", "ロ" },
   { "ワ", "ワ" }, { "ヲ", "ヲ" }, { "ン", "ン" },
   { "ァ", "ァ" }, { "ィ", "ィ" }, { "ゥ", "ゥ" }, { "ェ", "ェ" }, { "ォ", "ォ" },
   { "ャ", "ャ" }, { "ュ", "ュ" }, { "ョ", "ョ" }, { "ッ", "ッ" },
   { "。", "。" }, { "「", "「" }, { "」", "」" }, { "、", "、" }, { "・", "・" },
   { "ー", "ー" }, { "", "" }
  };

  /**
   * 文字列に含まれる半角カナを全角カナに変換するメソッド
   *
   * @param p 変換する半角カナ文字列
   * @return 変換後の全角カナ文字列
   */
  public static String kkanaHan2Zen(String p) {
   String str = "";
   // パラメータの文字列を先頭から1文字づつ調べます
   for (int i = 0, j = 0; i < p.length(); i++) {
    // 文字列から1文字取り出します
    Character c = new Character(p.substring(i, i + 1).charAt(0));
    // Unicode半角カタカナのコード範囲か調べます   
    if (c.compareTo(new Character((char)0xff61)) >= 0
     && c.compareTo(new Character((char)0xff9f)) <= 0) {
     // 半角全角変換テーブルから半角カナにマッチするエントリを探し、
     // 対応する全角カナを取得して戻り文字列へセットします
     for (j = 0; j < kanaHanZenTbl.length; j++) {
      if (p.substring(i).startsWith(kanaHanZenTbl[j][0])) {
       str = str + kanaHanZenTbl[j][1];
       i += kanaHanZenTbl[j][0].length() - 1;
       break;
      }
     }
     // 半角全角変換テーブルに半角カナにマッチするエントリがなければ
     // 変換せずにそのまま戻り文字列へセットします
     if (j >= kanaHanZenTbl.length) {
      str = str + p.substring(i, i + 1);
     }
    } else { // Unicode半角カタカナ以外なら変換せずにそのまま戻り文字列へセットします
     str = str + p.substring(i, i + 1);
    }
   }
   // 変換後文字列を戻します
   return str;
  }

  /**
   * 文字列に含まれる全角カナを半角カナに変換するメソッド
   * @param p 変換する全角カナ文字列
   * @return 変換後の半角カナ文字列
   */
  public static String kkanaZen2Han(String p) {
   String str = "";
   // パラメータの文字列を先頭から1文字づつ調べます
   for (int i = 0, j = 0; i < p.length(); i++) {
    // 文字列から1文字取り出します
    Character c = new Character(p.substring(i, i + 1).charAt(0));
    // Unicode全角カタカナのコード範囲か調べます
    if (c.compareTo(new Character((char)0x30a1)) >= 0
     && c.compareTo(new Character((char)0x30fc)) <= 0) {
     // 半角全角変換テーブルから全角カナにマッチするエントリを探し、
     // 対応する半角カナを取得して戻り文字列へセットします
     for (j = 0; j < kanaHanZenTbl.length; j++) {
      if (p.substring(i).startsWith(kanaHanZenTbl[j][1])) {
       str = str + kanaHanZenTbl[j][0];
       break;
      }
     }
     // 半角全角変換テーブルの全角カナにマッチするエントリがなければ
     if (j >= kanaHanZenTbl.length) {
      str = str + p.substring(i, i + 1);
     }
    } else { // 全角カタカナ以外なら変換せずにそのまま戻り文字列へセットします
     str = str + p.substring(i, i + 1);
    }
   }
   // 変換後文字列を戻します
   return str;
  }

  /**
   * 半角英文轉換成全角英文
   * 文字列に含まれる半角ラテン基本文字を全角ラテン基本文字に変換するメソッド
   *
   * @param p 変換する半角ラテン基本文字列
   * @return 変換後の全角ラテン基本文字列
   */
  public static String latinHan2Zen(String p) {
   String str = "";
   // パラメータの文字列を先頭から1文字づつ調べます
   for (int i = 0; i < p.length(); i++) {
    // 文字列から1文字取り出します
    Character c = new Character(p.substring(i, i + 1).charAt(0));
    // Unicode半角ラテン文字のコード範囲(!~~)であるか調べます
    if (c.compareTo(new Character((char)0x0021)) >= 0
     && c.compareTo(new Character((char)0x007e)) <= 0) {
     // 変換文字に0xfee0を加算して全角文字に変換します
     Character x =
      new Character(
       (char) (c.charValue()
        + (new Character((char)0xfee0)).charValue()));
     // 文字列としてセットします
     str = str + x.toString();
    } else { // 半角ラテン文字以外なら変換せずにそのまま戻り文字列へセットします
     str = str + p.substring(i, i + 1);
    }
   }
   //変換後文字列を戻します
   return str;
  }

  /**
   * 全角英文轉換成半角英文
   * 文字列に含まれる全角ラテン文字を半角ラテン文字に変換するメソッド
   *
   * @param p 変換する全角ラテン文字列
   * @return 変換後の半角ラテン文字列
   */
  public static String latinZen2Han(String p) {
   String str = "";
   // パラメータの文字列を先頭から1文字づつ調べます
   for (int i = 0; i < p.length(); i++) {
    // 文字列から1文字取り出します
    Character c = new Character(p.substring(i, i + 1).charAt(0));
    // Unicode全角ラテン文字のコード範囲(!から~)であるか調べます
    if (c.compareTo(new Character((char)0xff01)) >= 0
     && c.compareTo(new Character((char)0xff5e)) <= 0) {
     // 変換文字から0xfee0を減算して半角文字に変換します
     Character x =
      new Character(
       (char) (c.charValue()
        - (new Character((char)0xfee0)).charValue()));
     // 文字列としてセットします
     str = str + x.toString();
    } else { // 全角ラテン文字以外なら変換せずにそのまま戻り文字列へセットします
     str = str + p.substring(i, i + 1);
    }
   }
   //変換後文字列を戻します
   return str;
  }

  /**
   * 全角片假名轉換成全角平假名
   * 文字列に含まれる全角カナを全角かなに変換するメソッド
   * @param p 変換する全角カナ文字列
   * @return 変換後の全角かな文字列
   */
  public static String kkana2Hkana(String p) {
   String str = "";
   // パラメータの文字列を先頭から1文字づつ調べます
   for (int i = 0, j = 0; i < p.length(); i++) {
    // 文字列から1文字取り出します
    Character c = new Character(p.substring(i, i + 1).charAt(0));
    // Unicode全角カタカナのコード範囲(ァ~ン)であるか調べます
    if (c.compareTo(new Character((char)0x30a1)) >= 0
     && c.compareTo(new Character((char)0x30f3)) <= 0) {
     // 全角カナ文字から0x0060を減算して全角かな文字に変換します
     Character x =
      new Character(
       (char) (c.charValue()
        - (new Character((char)0x0060)).charValue()));
     // 文字列としてセットします
     str = str + x.toString();
    } else { // 全角カタカナ以外なら変換せずにそのまま戻り文字列へセットします
     str = str + p.substring(i, i + 1);
    }
   }
   // 変換後文字列を戻します
   return str;
  }

  /**
   * 全角平假名轉換成全角片假名
   * 文字列に含まれる全角かなを全角カナに変換するメソッド
   * @param p 変換する全角かな文字列
   * @return 変換後の全角カナ文字列
   */
  public static String hkana2Kkana(String p) {
   String str = "";
   // パラメータの文字列を先頭から1文字づつ調べます
   for (int i = 0, j = 0; i < p.length(); i++) {
    // 文字列から1文字取り出します
    Character c = new Character(p.substring(i, i + 1).charAt(0));
    // Unicode全角ひらがなのコード範囲(ぁ~ん)であるか調べます
    if (c.compareTo(new Character((char)0x3041)) >= 0
     && c.compareTo(new Character((char)0x3093)) <= 0) {
     // 全角かな文字に0x0060を加算して全角カナ文字に変換します
     Character x =
      new Character(
       (char) (c.charValue()
        + (new Character((char)0x0060)).charValue()));
     // 文字列としてセットします
     str = str + x.toString();
    } else { // 全角カタカナ以外なら変換せずにそのまま戻り文字列へセットします
     str = str + p.substring(i, i + 1);
    }
   }
   // 変換後文字列を戻します
   return str;
  }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27577次
    • 积分:329
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:25篇
    • 译文:0篇
    • 评论:6条
    文章分类
    文章存档