java 中判断是否为 汉字(转)
- public boolean vd(String str){
- char[] chars=str.toCharArray();
- boolean isGB2312=false;
- for(int i=0;i<chars.length;i++){
- byte[] bytes=(""+chars[i]).getBytes();
- if(bytes.length==2){
- int[] ints=new int[2];
- ints[0]=bytes[0]& 0xff;
- ints[1]=bytes[1]& 0xff;
- if(ints[0]>=0x81 && ints[0]<=0xFE && ints[1]>=0x40 && ints[1]<=0xFE){
- isGB2312=true;
- break;
- }
- }
- }
- return isGB2312;
- }
首先要import java.util.regex.Pattern 和 java.util.regex.Matcher
这两个包,接下来是代码
- public boolean isNumeric(String str)
- {
- Pattern pattern = Pattern.compile(”[0-9]*”);
- Matcher isNum = pattern.matcher(str);
- if( !isNum.matches() ) {
- return false;
- }
- return true;
- }
- java.lang.Character.isDigit(ch[0])
-----------------另一种-----------------
- public static void main(String[] args) {
- int count = 0;
- String regEx = "[\\u4e00-\\u9fa5]";
- //System.out.println(regEx);
- String str = "中文fdas ";
- //System.out.println(str);
- Pattern p = Pattern.compile(regEx);
- Matcher m = p.matcher(str);
- while (m.find()) {
- for (int i = 0; i <= m.groupCount(); i++) {
- count = count + 1;
- }
- }
- System.out.println("共有 " + count + "个 ");
- }
判断java String中是否有汉字的方法
java用的是Unicode 编码char 型变量的范围是0-65535 无符号的值,可以表示 65536个字符,基本上地球上的字符可被全部包括了,实际中,我们希望判断一个字符是不是汉字,或者一个字符串里的字符是否有汉字来满足业务上的需 求,String类中有个这样的方法可得到其字符长度length() ,看下面例子,
- String s1 = "我是中国人";
- String s2 = "imchinese";
- String s3 = "im中国人";
- System.out.println(s1+":"+new String(s1).length());
- System.out.println(s2+":"+new String(s2).length());
- System.out.println(s3+":"+new String(s3).length());
OUTPUT:
我是中国人:5
imchinese:9
im中国人:5
看到了吧,字符串里如果有双字节的字符java就把每个字符都按双字节编码,如果都是单字节的字符就按单字节编码
于是按照以上的规律,结合一位QQ昵称 ?G茶?I珠海 兄的提示由以下解决方法,就是判断字符串的长度和字符字节的长度是否相同来判断是否有双字节的字符
- System.out.println((s1.getBytes().length == s1.length())?"s1无汉字":"s1有汉字");
- System.out.println((s2.getBytes().length == s2.length())?"s2无汉字":"s2有汉字");
- System.out.println((s3.getBytes().length == s3.length())?"s3无汉字":"s3有汉字");
OUTPUT:
s1有汉字
s2无汉字
s3有汉字 //
且慢,这样诚然可以判断出来一个串中是否有双字节编码的字符,但是要精确判断是否有汉字就有些麻烦了,我们知道还有许多其他国家的字符在Unicode中是双字节的.
于是,需要进一步确定汉字的编码范围怎么确定呢,我用了一个本办法那就是现在记事本输出0-65535之间的字符,通过观察发现第一个汉字是'一 '最后一个是'??'(现在我也不认识);这下好了判断汉字就容易多了比如我们可以通过比较字符的编码范围,最后给大家一些我试验的结果汉字基本集中在 [19968,40869]之间,共有20901个汉字(是不是少了点,算算你能认识多少)
一个不会敲代码的程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述