您的位置:程序门 -> java -> j2se / 基础类



急问:对于一个字符,如果判断其是否为汉字?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


急问:对于一个字符,如果判断其是否为汉字?[已结贴,结贴人:kafka0102]
发表于:2007-07-03 19:24:30 楼主
我试了一下,java中的汉字是3个字节,而如字母等是1个字节,想知道是怎么设计的。重要的是,对于给定的字符(char型的),要如何才能识别其是否为汉字,最好能知道该汉字的首字母是多少。高手帮忙了!
发表于:2007-07-03 21:15:461楼 得分:0
学习
发表于:2007-07-03 21:23:232楼 得分:0
学习
发表于:2007-07-03 22:18:093楼 得分:0
用正则表达式可以判断
发表于:2007-07-03 23:53:114楼 得分:0
应该通过中文编码范围来判断吧。
发表于:2007-07-04 08:25:585楼 得分:0
是不是能通过unicode码范围来判断?但是在java中如何得到其unicode码,而它范围又是多少?明白的告知一下。
发表于:2007-07-04 09:06:186楼 得分:0
学习
发表于:2007-07-04 09:18:327楼 得分:0
用正则表达式吧
发表于:2007-07-04 10:59:078楼 得分:10
基本的   cjk   汉字的   unicode   码范围是   u4e00~u9fbf   的,不过   cjk   还有其他的扩展字符集,由于是   unicode   组织在   2006   年制订的   unicode   5.0   标准,在我的   jdk   1.5   中扩展字符集显示的都是“?”,就简单而言可以判断   \u4e00   ~   \u9fbf   之间的皆为汉字。

public   static   void   main(string[]   args)   {
  char   c   =   '槃 ';
  system.out.printf( "%c(u+%x): ",   c,   (int)c);
  if(c> = '\u4e00 '   &&   c <= '\u9fbf '){
    system.out.println( "是汉字 ");
  }else{
    system.out.println( "不是汉字 ");
  }
}
发表于:2007-07-04 11:03:459楼 得分:0
楼上的正解,不用正则就是这样判断了
发表于:2007-07-04 13:36:0410楼 得分:0
怎么用正则表达式判断?
发表于:2007-07-04 14:54:3411楼 得分:0
从键盘输入一个字,判断是否是汉字,又如何实现?
发表于:2007-07-04 14:54:4612楼 得分:0
用正则
[\u4e00-\u9fa5]
发表于:2007-07-04 15:17:2513楼 得分:10
public   static   void   main(string[]   args)   {
  scanner   sc   =   new   scanner(system.in);
  system.out.print( "请输入一个字符: ");
  string   s   =   sc.next();
  for(int   i=0;   i <s.length();   i++)   {
    system.out.printf( "%c   --   ",   s.charat(i));
    boolean   b   =   (s.charat(i)   +   " ").matches( "[\u4e00-\u9faf] ");
    system.out.println(b? "是汉字 ": "不是汉字 ");
  }
}
发表于:2007-07-04 15:25:3314楼 得分:0
我试了一下,java中的汉字是3个字节,…………

=   *   =   *   =   *   =   *   =   *   =   *   =   *   =   *   =   *   =   *   =   *   =

为什么我的   java   中的汉字是两个字节?

system.out.println( "中 ".getbytes().length);
发表于:2007-07-04 15:35:5515楼 得分:0
#include   <iostream>
#include   <cstdio>
#include   <cmath>

using   namespace   std;

bool   ischinesechar(const   char   ch)
{
                return   (   ch   &   0x80);
}

int   main()
{
                char*   p   =   "aaa你123$%^&好 ";

                for   (int   i   =   0;   i   <   strlen(p);   i++)
                {
                                if   (ischinesechar(p[i]))
                                cout < < "第   " < <i < < "   个char是中文 " < <endl;
                }
                cout   < <   p   < <   endl;

                return   0;
}

c++中的方法,改成java的就行了.主要是英文字符的值一定小于0x80,即最高们是0,而中文字符(所占的两个字符都是)的最高位是1.
发表于:2007-07-04 16:16:3816楼 得分:0
楼上的不对啦~~,java   中的字符使用的   unicode   码表示的,而不是用   ascii   码表示的。

楼主说只要判断汉字,你这方法不妥,高位为   1   的字符并不全是汉字啊,比如:★(a1ef、u+2605)等等这些字符。
发表于:2007-07-04 17:44:4417楼 得分:0
学习了
发表于:2007-07-04 18:06:3918楼 得分:0
学习
发表于:2007-07-04 18:27:4719楼 得分:0
楼上的不对啦~~,java   中的字符使用的   unicode   码表示的,而不是用   ascii   码表示的。
----------------------------------------------------------------------------------
unicode码也是用多个字符来表示的,把要表示的字符分解成字节不就行了?

楼主说只要判断汉字,你这方法不妥,高位为   1   的字符并不全是汉字啊,比如:★(a1ef、u+2605)等等这些字符。
-------------------------------------------------------------------------------------
以上方法只是给出一个最基础的算法,具体到哪种码表示的汉字,还要看其汉字的编码值来判断使用.
发表于:2007-07-04 19:22:2820楼 得分:0
学习
发表于:2007-07-04 19:37:5521楼 得分:0
感谢各位热心回帖,使用bao110908(bao)(bao)   的方法就满足我的需要了。
发表于:2007-07-04 19:40:5622楼 得分:0
记号下
发表于:2007-07-04 20:08:0223楼 得分:0
谢谢
发表于:2007-07-04 20:33:3124楼 得分:0
米看懂,哭了……
发表于:2007-07-04 21:15:5425楼 得分:0
可以将字符转换成ascii码,能通过ascii码的值判断是不是汉字.


快速检索

最新资讯
热门点击