`

全角半角转换问题

    博客分类:
  • java
阅读更多
网上找个日文全角半角转换的方法。整理如下:

public class aaa {
/**          * 半角カナ用定数          */
    public static final String HANKANA = APConstants.DV_1;
    /**          * 全角カナ用定数          */
    public static final String ZENKANA = APConstants.DV_2;
    // 半角カタカナを全角カタカナにするマッピング
    private static final HashMap<Character, Character> H2Z = new HashMap<Character, Character>();
    // 全角カタカナを半角カタカナにするマッピング
    private static final HashMap<Character, Character> Z2H = new HashMap<Character, Character>();

static
    {
        // 半角カタカナを全角カタカナにするマッピング
        H2Z.put('\uFF67','\u30A1');
        H2Z.put('\uFF68','\u30A3');
        H2Z.put('\uFF69','\u30A5');
        H2Z.put('\uFF6A','\u30A7');
        H2Z.put('\uFF6B','\u30A9');
        H2Z.put('\uFF70','\u30FC');
        H2Z.put('\uFF71','\u30A2');
        H2Z.put('\uFF72','\u30A4');
        H2Z.put('\uFF73','\u30A6');
        H2Z.put('\uFF74','\u30A8');
        H2Z.put('\uFF75','\u30AA');
        H2Z.put('\uFF76','\u30AB');
        H2Z.put('\uFF77','\u30AD');
        H2Z.put('\uFF78','\u30AF');
        H2Z.put('\uFF79','\u30B1');
        H2Z.put('\uFF7A','\u30B3');
        H2Z.put('\uFF7B','\u30B5');
        H2Z.put('\uFF7C','\u30B7');
        H2Z.put('\uFF7D','\u30B9');
        H2Z.put('\uFF7E','\u30BB');
        H2Z.put('\uFF7F','\u30BD');
        H2Z.put('\uFF80','\u30BF');
        H2Z.put('\uFF81','\u30C1');
        H2Z.put('\uFF82','\u30C4');
        H2Z.put('\uFF83','\u30C6');
        H2Z.put('\uFF84','\u30C8');
        H2Z.put('\uFF85','\u30CA');
        H2Z.put('\uFF86','\u30CB');
        H2Z.put('\uFF87','\u30CC');
        H2Z.put('\uFF88','\u30CD');
        H2Z.put('\uFF89','\u30CE');
        H2Z.put('\uFF8A','\u30CF');
        H2Z.put('\uFF8B','\u30D2');
        H2Z.put('\uFF8C','\u30D5');
        H2Z.put('\uFF8D','\u30D8');
        H2Z.put('\uFF8E','\u30DB');
        H2Z.put('\uFF8F','\u30DE');
        H2Z.put('\uFF90','\u30DF');
        H2Z.put('\uFF91','\u30E0');
        H2Z.put('\uFF92','\u30E1');
        H2Z.put('\uFF93','\u30E2');
        H2Z.put('\uFF94','\u30E4');
        H2Z.put('\uFF95','\u30E6');
        H2Z.put('\uFF96','\u30E8');
        H2Z.put('\uFF6C','\u30E3');
        H2Z.put('\uFF6D','\u30E5');
        H2Z.put('\uFF6E','\u30E7');
        H2Z.put('\uFF6F','\u30C3');
        H2Z.put('\uFF97','\u30E9');
        H2Z.put('\uFF98','\u30EA');
        H2Z.put('\uFF99','\u30EB');
        H2Z.put('\uFF9A','\u30EC');
        H2Z.put('\uFF9B','\u30ED');
        H2Z.put('\uFF9C','\u30EF');
        H2Z.put('\uFF9D','\u30F3');
        H2Z.put('\uFF9E','\u309B');
        H2Z.put('\uFF9F','\u309C');
        H2Z.put('\uFF66','\u30F2');

        // 全角カタカナを半角カタカナにするマッピング
        Z2H.put('\u30A1','\uFF67');
        Z2H.put('\u30A3','\uFF68');
        Z2H.put('\u30A5','\uFF69');
        Z2H.put('\u30A7','\uFF6A');
        Z2H.put('\u30A9','\uFF6B');
        Z2H.put('\u30FC','\uFF70');
        Z2H.put('\u30A2','\uFF71');
        Z2H.put('\u30A4','\uFF72');
        Z2H.put('\u30A6','\uFF73');
        Z2H.put('\u30A8','\uFF74');
        Z2H.put('\u30AA','\uFF75');
        Z2H.put('\u30AB','\uFF76');
        Z2H.put('\u30AD','\uFF77');
        Z2H.put('\u30AF','\uFF78');
        Z2H.put('\u30B1','\uFF79');
        Z2H.put('\u30B3','\uFF7A');
        Z2H.put('\u30B5','\uFF7B');
        Z2H.put('\u30B7','\uFF7C');
        Z2H.put('\u30B9','\uFF7D');
        Z2H.put('\u30BB','\uFF7E');
        Z2H.put('\u30BD','\uFF7F');
        Z2H.put('\u30BF','\uFF80');
        Z2H.put('\u30C1','\uFF81');
        Z2H.put('\u30C4','\uFF82');
        Z2H.put('\u30C6','\uFF83');
        Z2H.put('\u30C8','\uFF84');
        Z2H.put('\u30CA','\uFF85');
        Z2H.put('\u30CB','\uFF86');
        Z2H.put('\u30CC','\uFF87');
        Z2H.put('\u30CD','\uFF88');
        Z2H.put('\u30CE','\uFF89');
        Z2H.put('\u30CF','\uFF8A');
        Z2H.put('\u30D2','\uFF8B');
        Z2H.put('\u30D5','\uFF8C');
        Z2H.put('\u30D8','\uFF8D');
        Z2H.put('\u30DB','\uFF8E');
        Z2H.put('\u30DE','\uFF8F');
        Z2H.put('\u30DF','\uFF90');
        Z2H.put('\u30E0','\uFF91');
        Z2H.put('\u30E1','\uFF92');
        Z2H.put('\u30E2','\uFF93');
        Z2H.put('\u30E4','\uFF94');
        Z2H.put('\u30E6','\uFF95');
        Z2H.put('\u30E8','\uFF96');
        Z2H.put('\u30E9','\uFF97');
        Z2H.put('\u30EA','\uFF98');
        Z2H.put('\u30EB','\uFF99');
        Z2H.put('\u30EC','\uFF9A');
        Z2H.put('\u30ED','\uFF9B');
        Z2H.put('\u30EF','\uFF9C');
        Z2H.put('\u30F2','\uFF66');
        Z2H.put('\u30F3','\uFF9D');
        Z2H.put('\u30C3','\uFF6F');
    };

/** 全角カタカナを半角カタカナに変換します。
     * @return 半角カタカナ文字列
     */
    public String toHankanaCase1(String str) {
        int i = 0;
        int f = str.length();
        char[] chars = {0xFF9E, 0xFF9F};
        StringBuilder buffer = new StringBuilder();
         for(;i<f;i++) {
            char c = str.charAt(i);
            if(Z2H.containsKey(c)){
                 buffer.append(Z2H.get(c));
            } else if(0x30AB <= c && c <= 0x30C9){
                buffer.append(Z2H.get((char)(c - 1))).append(0xFF9E);
            } else if(0x30CF <= c && c <= 0x30DD) {
                buffer.append(Z2H.get((char)(c - c % 3))).append(chars[c % 3 - 1]);
            } else {
                buffer.append(c);
            };
        };
         return buffer.toString();
    };

    /**
     * 半角カタカナを全角カタカナに変換します。
     * @return {String}
     */
    public String toZenkanaCase1(String str) {
        StringBuilder buffer = new StringBuilder(str);
          for(int i=0;i<str.length();i++) {
             char c = str.charAt(i);
             if(H2Z.containsKey(c)) {
                 buffer.setCharAt(i, H2Z.get(c));
             };
         };
         return buffer.toString();
    };

   /**
    * 全角ひらがなを全角カタカナに変換します。
    * @return 全角カタカナ
    */
    public String toKatakanaCase1(String str) {
        StringBuilder buffer = new StringBuilder(str);
        for(int i=0;i<str.length();i++) {
           char c = str.charAt(i);
           if(0x3041 <= c && c <= 0x3096){
               buffer.setCharAt(i, (char)(c + 0x0060));
           };
        };
        return buffer.toString();
    };

   /**
    * 全角カタカナを全角ひらがなに変換します。
    *
    * @return 全角ひらがなの文字列
    */
    public String toHiraganaCase1(String str) {
         StringBuilder buffer = new StringBuilder(str);
         for(int i=0;i<str.length();i++) {
             char c = str.charAt(i);
            if(0x30A1 <= c && c <= 0x30F6){
                buffer.setCharAt(i, (char)(c - 0x0060));
            };
        };
        return buffer.toString();
    };

   /**
    * 全角英数字を半角英数字に変換します。
    * @return 半角英数字文字列
    */
    public String toHanalphCase1(String str) {
         StringBuilder buffer = new StringBuilder(str);
         for(int i=0;i<str.length();i++) {
            char c = str.charAt(i);
            // 【!】~【~】の範囲
            if(0xFF01 <= c && c <= 0xFF5E) {
                buffer.setCharAt(i, (char)(c - 0xFEE0));
                continue;
            };
            // 全角スペース
            if(c == 0x3000) {
                buffer.setCharAt(i, '\u0020');
                continue;
            };
        };
        return buffer.toString();
    };

   /**
    * 半角英数字を全角英数字に変換します。
    * @return 全角英数字
    */
    public String toZenalphCase1(String str) {
         StringBuilder buffer = new StringBuilder(str);
         for(int i=0;i<str.length();i++) {
            char c = str.charAt(i);
            // 【!】~【~】の範囲
            if(c <= 0x007E && 0x0021 <= c) {
                buffer.setCharAt(i, (char)(c + 0xFEE0));
                continue;
            };
            // 半角スペース
            if(c == 0x0020) {
                buffer.setCharAt(i, '\u3000');
                continue;
            };
        };
        return buffer.toString();
    };

    /**
     * 入口メソッド
     * @param type 全角、半角変換フラグ
     * @param str 目標文字列
     * @return str 変換文字列
     */
     public String convert(String type, String str) {
         if (StringUtils.isNotEmpty(str)) {
             int len = APConstants.NUM_14 + APConstants.NUM_2 + APConstants.NUM_1;
             if (str.length() > len) {
                 str = str.substring(APConstants.NUM_0, len);
             }
             if(type.equals(HANKANA)){
                 str = toZenkanaCase1(str);
                 str = toZenalphCase1(str);
             } else if(type.equals(ZENKANA)) {
                 str = toHankanaCase1(str);
                 str = toHanalphCase1(str);
             }
         }
         return str;
    };
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    日文全角半角转化

    日文全角半角转换是指将日文中的全角字符转换为半角字符或将半角字符转换为全角字符的过程。在计算机编程中,日文全角半角转换是非常重要的一步,因为它可以确保日文字符的正确显示和处理。 在 Java 编程语言中,...

    字符串的全角半角转换 java

    在Java编程中,字符串的全角半角转换是一项常见的需求,尤其在处理用户输入或文本显示时。全角字符和半角字符的区别在于他们的宽度和编码方式。全角字符(全宽度字符)通常用于东亚语言,如中文、日文、韩文等,每个...

    全角半角转换函数.txt

    综上所述,全角半角转换函数在文本处理领域具有重要的实用价值,尤其在东亚语言环境中,对于确保文本正确显示、计算和对齐具有不可或缺的作用。通过对上述函数的理解和应用,可以有效提升软件产品的国际化水平和用户...

    C++全角半角字符转换

    C++全角半角字符转换

    java 全角半角转换

    java 全角半角转换 对角对全角的转换

    全角半角转换,c++

    ### 全角半角转换的原理 全角字符与半角字符之间的转换主要是基于字符编码的不同。对于英文字母、数字以及部分符号,全角字符的Unicode编码位于U+FF01至U+FF5E区间内,比其对应的半角字符的Unicode编码高0xFEE0。...

    全角半角 转换器

    全角 半角 转换器 C C++ 无需安装 小巧易用

    全角半角转换工具,编程后发现问题时可以对大把的程序改变,不必再一个一个手动修改,很方便!

    全角半角转换工具的出现就解决了这个问题,它可以快速、准确地批量转换文本中的全角和半角字符,使得程序员能够更高效地修复问题。 该压缩包包含两个文件:`sbcdbc.exe` 和 `下载说明.htm`。`sbcdbc.exe` 可能是...

    解决.NET2.0全角半角转换麻烦的补丁

    这个“解决.NET2.0全角半角转换麻烦的补丁”很可能是为了简化这一过程而创建的一个实用工具,它可以帮助开发者更方便地处理各种文本格式问题。对于需要用到此类转换的项目,可以考虑采用这样的辅助类或者方法,以...

    Flex 日语全角半角转换

    标题中的“Flex 日语全角半角转换”指的是在Adobe Flex这一编程环境中处理日语文本时,涉及到全角字符(全宽度字符)和半角字符(半宽度字符)的转换问题。在日语中,全角字符通常用于正式文本,而半角字符则常见于...

    全角半角数字转换工具v1.0713中文绿色免费版

    全角半角转换工具是一款可以批量将全角转换成半角,或批量将半角转换为全角的软件。全角半角转换工具支持文件导入、导出。 使用方法 1.将带有全角数字的新闻(Ctrl C)复制,在(Ctrl V)粘贴到上面文本框内。 2....

    java全角半角转换程序

    ### Java全角半角转换程序知识点详解 #### 核心概念 在计算机处理文本时,全角字符和半角字符是常见的编码问题。全角字符主要用于东亚语言(如中文、日语、韩语等),其宽度通常是半角字符的两倍。在ASCII码中,...

    C#实现字符串全角半角转换类

    这个`CharConverter`类提供了简洁的API,可以方便地集成到任何C#项目中,用于处理全角半角字符的转换需求。通过理解字符编码和Unicode码点,我们可以更好地理解和实现这类转换功能,这对于开发涉及多语言或特殊字符...

    如何批量修改字母标点全角半角?.docx

    此外,还有一些符号的英汉互相错用的成批转换问题。比如英文半角双引号转汉字全角、段末英文半角句号转汉字全角、段首英文半角空格转空两格汉字空格位等。这些操作比较特殊,我们可以用手动操作替换并录制宏,或用...

    全角半角转换

    在进行全角半角转换时,我们需要注意字符编码的问题。C#默认使用Unicode编码,这使得大部分情况下处理全角半角转换相对简单,但如果处理的是其他编码(如GBK),则需要先将字符串转换为Unicode,完成转换后再转回...

    字符串,标点符号全角半角转换

    ### 全角与半角转换原理 全角与半角字符的转换基于一定的对应关系。对于英文字符和数字而言,全角字符的Unicode码点是在其半角对应字符的基础上加上了65248。例如,半角的'A'的Unicode码点是65,其全角形式的码点...

    全角半角数字转换

    在处理中英文混合或者需要统一格式的文本时,全角半角数字的转换就显得尤为重要。 全角数字在全角状态下显示,0到9的数字分别对应的Unicode值为65296到65305,而半角数字对应的ASCII值则是48到57。转换程序的核心就...

    postgres全角转半角函数.txt

    对postgresql数据库中不规则的数据批量处理查询,有些是全角的,需要转换查询,匹配,可以使用这个方法postgres全角转半角函数.txt

    对全角半角字符串的处理

    以下是一段基于Delphi语言实现的全角半角转换示例代码: ```delphi const cCharCn: array [#32..#126] of string [2] = ( {}'', {!}'', {"}'", {#}'', {}'', {%}'', {&}'', {'}'', {(}'(', {)}')', {*}'', {+}'...

    将全角转换为半角的程序

    总结来说,全角半角转换是处理中英文混合文本时的重要工具,这个"全角半角转换器.exe"程序简化了这一过程,为用户提供了实用的功能。通过理解全角和半角字符的差异以及转换原理,我们可以更好地理解和利用这个工具,...

Global site tag (gtag.js) - Google Analytics