全角假名转换半角假名+验证是否为半角假名

⏹全角假名转换半角假名

public class Test {

    private static final char[] ZENKAKU_KATAKANA = {'ァ', 'ア', 'ィ', 'イ', 'ゥ', 'ウ', 'ェ', 'エ', 'ォ', 'オ', 'カ', 'ガ', 'キ', 'ギ', 'ク', 'グ', 'ケ', 'ゲ', 'コ', 'ゴ',
            'サ', 'ザ', 'シ', 'ジ', 'ス', 'ズ', 'セ', 'ゼ', 'ソ', 'ゾ', 'タ', 'ダ', 'チ', 'ヂ', 'ッ', 'ツ', 'ヅ', 'テ', 'デ', 'ト', 'ド', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ',
            'バ', 'パ', 'ヒ', 'ビ', 'ピ', 'フ', 'ブ', 'プ', 'ヘ', 'ベ', 'ペ', 'ホ', 'ボ', 'ポ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ャ', 'ヤ', 'ュ', 'ユ', 'ョ', 'ヨ', 'ラ', 'リ',
            'ル', 'レ', 'ロ', 'ヮ', 'ワ', 'ヰ', 'ヱ', 'ヲ', 'ン', 'ヴ', 'ヵ', 'ヶ'};

    private static final String[] HANKAKU_KATAKANA = {"ァ", "ア", "ィ", "イ", "ゥ", "ウ", "ェ", "エ", "ォ", "オ", "カ", "ガ", "キ", "ギ", "ク", "グ", "ケ", "ゲ",
            "コ", "ゴ", "サ", "ザ", "シ", "ジ", "ス", "ズ", "セ", "ゼ", "ソ", "ゾ", "タ", "ダ", "チ", "ヂ", "ッ", "ツ", "ヅ", "テ", "デ", "ト", "ド", "ナ", "ニ",
            "ヌ", "ネ", "ノ", "ハ", "バ", "パ", "ヒ", "ビ", "ピ", "フ", "ブ", "プ", "ヘ", "ベ", "ペ", "ホ", "ボ", "ポ", "マ", "ミ", "ム", "メ", "モ", "ャ", "ヤ",
            "ュ", "ユ", "ョ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ワ", "イ", "エ", "ヲ", "ン", "ヴ", "カ", "ケ"};

    public static final char ZENKAKU_KATAKANA_FIRST_CHAR = ZENKAKU_KATAKANA[0];

    public static final char ZENKAKU_KATAKANA_LAST_CHAR = ZENKAKU_KATAKANA[ZENKAKU_KATAKANA.length - 1];

    // 全角假名转换为半角假名
    public static String zenkakuKkToHankakuKk(String str) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char originalChar = str.charAt(i);
            String convertedChar = zenkakuKatakanaToHankakuKatakana(originalChar);
            sb.append(convertedChar);
        }
        return sb.toString();
    }

    public static String zenkakuKatakanaToHankakuKatakana(char str) {
        if (str >= ZENKAKU_KATAKANA_FIRST_CHAR && str <= ZENKAKU_KATAKANA_LAST_CHAR) {
            return HANKAKU_KATAKANA[str - ZENKAKU_KATAKANA_FIRST_CHAR];
        } else {
            return String.valueOf(str);
        }
    }

    public static void main(String[] args) {

        // 全角假名转换为半角假名
        String result = zenkakuKkToHankakuKk("カ メイイ");
        System.out.println(result);  // カ メイイ
    }
}

⏹验证是否为半角假名

public class Test {

    public static final String BLANK = "";

    // 改行文字
    public static final String NEWLINE_CRLF = "\r\n";

    // 改行文字
    public static final String NEWLINE_LF = "\n";

    // 消除转义符
    public static String newLineEscape(String str) {
        if (str == null || BLANK.equals(str)) {
            return BLANK;
        }
        return str.replaceAll(NEWLINE_CRLF, BLANK).replaceAll(NEWLINE_LF, BLANK);
    }

    // 验证是否为半角假名
    public static boolean validateIsHanKatakana(String value) {
        if (value == null || BLANK.equals(value)) {
            return true;
        }
        String str = newLineEscape(value);
        char[] chars = String.valueOf(str).toCharArray();
        for (char aChar : chars) {
            if (!((0xFF61 <= aChar && aChar <= 0xFF9F) || 0x0020 == aChar)) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {

        // 验证是否为半角假名
        System.out.println(validateIsHanKatakana("カ メイイ"));  // false
        System.out.println(validateIsHanKatakana("カ メイイ"));  // true
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值