我试了一下,java中的汉字是3个字节,而如字母等是1个字节,想知道是怎么设计的。重要的是,对于给定的字符(char型的),要如何才能识别其是否为汉字,最好能知道该汉字的首字母是多少。高手帮忙了!

解决方案 »

  1.   

    是不是能通过unicode码范围来判断?但是在java中如何得到其unicode码,而它范围又是多少?明白的告知一下。
      

  2.   

    基本的 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("不是汉字");
      }
    }
      

  3.   

    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?"是汉字":"不是汉字");
      }
    }
      

  4.   

    我试了一下,java中的汉字是3个字节,…………= * = * = * = * = * = * = * = * = * = * = * =为什么我的 Java 中的汉字是两个字节?System.out.println("中".getBytes().length);
      

  5.   

    #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.
      

  6.   

    楼上的不对啦~~,Java 中的字符使用的 Unicode 码表示的,而不是用 ASCII 码表示的。楼主说只要判断汉字,你这方法不妥,高位为 1 的字符并不全是汉字啊,比如:★(A1EF、U+2605)等等这些字符。
      

  7.   

    楼上的不对啦~~,Java 中的字符使用的 Unicode 码表示的,而不是用 ASCII 码表示的。
    ----------------------------------------------------------------------------------
    Unicode码也是用多个字符来表示的,把要表示的字符分解成字节不就行了?楼主说只要判断汉字,你这方法不妥,高位为 1 的字符并不全是汉字啊,比如:★(A1EF、U+2605)等等这些字符。
    -------------------------------------------------------------------------------------
    以上方法只是给出一个最基础的算法,具体到哪种码表示的汉字,还要看其汉字的编码值来判断使用.
      

  8.   

    感谢各位热心回帖,使用bao110908(bao)(bao) 的方法就满足我的需要了。
      

  9.   

    可以将字符转换成ASCII码,能通过ASCII码的值判断是不是汉字.