关于java全角半角转换

原创 2006年06月15日 13:37:00

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

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

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

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

java中实现全角半角转换

 public class Test {        public static void main(String[] args) {                String QJstr = "...
  • lbh198408
  • lbh198408
  • 2007年07月18日 09:58
  • 3834

Java工具类——全角半角字符相互转换

import org.apache.commons.lang.StringUtils; /** * * 提供对字符串的全角->半角,半角->全角转换 * */ pub...
  • softwave
  • softwave
  • 2014年06月08日 12:16
  • 2879

JAVA实现全角半角相互转化 (full2Half & half2Full)

说明: 1.全角:指一个字符占用两个标准字符位置。汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。一般的系统命令是不用全角字符的,只是在作文字处理时才会使用...
  • chndata
  • chndata
  • 2015年08月07日 09:45
  • 3310

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

import org.apache.commons.lang.StringUtils; /** * * 提供对字符串的全角->半角,半角->全角转换 * */ public ...
  • paincupid
  • paincupid
  • 2016年08月18日 14:12
  • 1074

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

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

C# 全角转换半角以及半角转换为全角

#region 全角转换半角以及半角转换为全角 ///转全角的函数(SBC case) ///全角空格为12288,半角空格为32 ///其他字符半角(...
  • a497785609
  • a497785609
  • 2016年09月28日 11:44
  • 2918

SqlServer数据库全角转半角

CREATE   FUNCTION   f_Convert( @str   VARCHAR(max),   --要转换的字符串 @flag   bit                         ...
  • dbagaoshou
  • dbagaoshou
  • 2016年09月22日 11:13
  • 313

MySQL 全角转换为半角

​序言:       用户注册时候,录入了全角手机号码,所以导致短信系统根据手机字段发送短信失败,现在问题来了,如何把全角手机号码变成半角手机号码?1,手机号码全角转换成半角先查询出来全角半角都存在的...
  • mchdba
  • mchdba
  • 2014年11月01日 22:00
  • 4578

半角/全角的转换算法

 /// 转全角的函数(SBC case)        ///         /// 任意字符串        /// 全角字符串        ///        ///全角空格为12288,...
  • bjnihao
  • bjnihao
  • 2009年07月17日 15:32
  • 638
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于java全角半角转换
举报原因:
原因补充:

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