作者:Cavien     文章来源:[url]http://bbs.cavien.com/   [/url]上传日期:2006-09-25
 
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就把每个字符都按双字节编码,如果都是单字节的字符就按单字节编码
于是按照以上的规律,判断字符串的长度和字符字节的长度是否相同来判断是否有双字节的字符

          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个汉字(是不是少了点,算算你能认识多少) .

转载于:https://blog.51cto.com/wuyang/45022

判断java String中是否有汉字的方法相关推荐

  1. 判断.java文件中getConnection与cleanUp数量是否匹配

    需求:查找未关闭的数据库连接. 两步走: 1.将给定目录下的及子目录下的 所有的给定后缀名的文件路径存到集合中. 2.使用正则表达式对每个文件进行匹配. package com.fanc.main;i ...

  2. java String中单个字符的操作

    前言 java String中的单个字符的操作,之所以有这样的需求,还是因为leetcode刷题.目前遇到的,常见的是两种思路. 把整个String转成 char[] 数组,然后就可以按着数组的方式处 ...

  3. C#判断一个类中有无指定名称的方法

    C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...

  4. java finally方法_讲解Java编程中finally语句的使用方法

    讲解Java编程中finally语句的使用方法 在java中的finally关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally块的内容一定会 ...

  5. 判断String中是否有汉字

    java用的是Unicode 编码char 型变量的范围是0-65535 无符号的值,可以表示 65536个字符,基本上地球上的字符可被全部包括了,实际中,我们希望判断一个字符是不是汉字,或者一个字符 ...

  6. 享元模式在 Java String 中的应用

    享元模式在 Java String 类中的应用.同样,我们还是先来看一段代码,你觉得这段代码输出的结果是什么呢? String s1 = "小争哥"; String s2 = &q ...

  7. java String中的valueOf方法

    class Main{public static void main(String[] args) {String s = String.valueOf(true);String c = String ...

  8. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

  9. Java虚拟机中获得Runtime实例的方法是什么?

    Runtime类用于表示Java虚拟机运行时的状态,它用于封装Java虚拟机进程.每次使用"java"命令启动Java虚拟机时都会对应一个Runtime实例,并且只有一个实例,应用 ...

最新文章

  1. java序列化的作用-这个挺有用的,不妨学学
  2. GAN是一种特殊的损失函数?
  3. 马库斯开喷GPT-3:演员而已,它根本不知道自己在说什么
  4. JavaScript实现最小公倍数LCM算法(附完整源码)
  5. 【C语言】输入一个三位数,逆序输出
  6. 【算法题目】数组中的逆序对
  7. ucc编译器(中间代码生成)
  8. 《Google Android开发入门与实战》
  9. 基于matlab的语音采集及处理
  10. 关于不登陆微信如何傻瓜式查看记录
  11. 三个基本的布尔逻辑算符是_布尔逻辑检索的主要运算符有哪些
  12. 使用css形变实现一个立方体
  13. 杜静20176395
  14. CentOS7 配置搭建安装LNMP
  15. LuoguP1637 三元上升子序列
  16. mac电脑备份后的微信聊天记录怎么找
  17. 无线连接世界 创新驱动中国 《微波射频技术》杂志发布
  18. Redis List命令大全
  19. 计算计控制系统2.0
  20. 中国PETG市场预测及战略研究报告(2022版)

热门文章

  1. Android开发之注解式框架ButterKnife在ADT中的设置
  2. printf 规定数据输出方式
  3. 如何在XSLT中将字符串转换为大写或小写形式
  4. LeetCode 209. 长度最小的子数组
  5. 你能否列出与 Elasticsearch 有关的主要可用字段数据类型?
  6. 利用Kubernetes名称空间来管理内存和CPU资源(二)
  7. Tomcat 通用组件
  8. mysql把一个表的字段赋值到另一张表,多表之间常用的操作
  9. keil5怎么配置程序风格_开发微信小程序怎么配置域名?
  10. 邮箱不可用 550 User has no permission