java 中判断某个字是否是汉字

需求:

需要判断输入字符是否是一个汉字,因为汉字都有唯一的Unicode码点,因此使用Unicode 码点判断是否汉字,这里用四字节汉字作为一个案例进行演示,这个字在扩展B区,即"U+20000~U+2A6D6":

 

备注:这里的Unicode 编码 20164是十六进制编码,即判断 20164 是否是在“20000~2A6D6”之间,因为此字是四字节汉字,java在进行处理时会有一些问题,因为java在存储汉字时,使用UTF-16编码代码单元来存储汉字,如果码点值小于65535(十进制),则用一个代码单元存储,如果是大于65535 则使用两个代码单元存储。因此在循环时需要使用码点数进行遍历,而不能根据字符串长度。

代码样例:

import java.util.regex.Pattern;


/**
 * @Description TODO
 * @date 2024/10/28 9:47
 * @Version 1.0
 * @Author gezongyang
 */
public class TestCharset {
    public static void main(String[] args) {
        String testString = "𠅤我";
        //根据码点数遍历字符串
        for(int index=0; index < testString.codePoints().count(); index++) {
            int codePoint = testString.codePointAt(index);
            String codeStr = Integer.toHexString(codePoint);
            System.out.println("十进制码点:" + codePoint);
            System.out.println("十六进制码点:" + codeStr);
            System.out.println(Pattern.matches("[\u20000-\u2A6D6]*", codeStr));
        }
    }
}

返回值:

十进制码点:131428
十六进制码点:20164
true
十进制码点:56676
十六进制码点:dd64
true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独行客-编码爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值