关于java全角半角转换

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

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;
  }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值