急问:对于一个字符,如果判断其是否为汉字? 我试了一下,java中的汉字是3个字节,而如字母等是1个字节,想知道是怎么设计的。重要的是,对于给定的字符(char型的),要如何才能识别其是否为汉字,最好能知道该汉字的首字母是多少。高手帮忙了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是能通过unicode码范围来判断?但是在java中如何得到其unicode码,而它范围又是多少?明白的告知一下。 基本的 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("不是汉字"); }} 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?"是汉字":"不是汉字"); }} 我试了一下,java中的汉字是3个字节,…………= * = * = * = * = * = * = * = * = * = * = * =为什么我的 Java 中的汉字是两个字节?System.out.println("中".getBytes().length); #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. 楼上的不对啦~~,Java 中的字符使用的 Unicode 码表示的,而不是用 ASCII 码表示的。楼主说只要判断汉字,你这方法不妥,高位为 1 的字符并不全是汉字啊,比如:★(A1EF、U+2605)等等这些字符。 楼上的不对啦~~,Java 中的字符使用的 Unicode 码表示的,而不是用 ASCII 码表示的。----------------------------------------------------------------------------------Unicode码也是用多个字符来表示的,把要表示的字符分解成字节不就行了?楼主说只要判断汉字,你这方法不妥,高位为 1 的字符并不全是汉字啊,比如:★(A1EF、U+2605)等等这些字符。-------------------------------------------------------------------------------------以上方法只是给出一个最基础的算法,具体到哪种码表示的汉字,还要看其汉字的编码值来判断使用. 感谢各位热心回帖,使用bao110908(bao)(bao) 的方法就满足我的需要了。 可以将字符转换成ASCII码,能通过ASCII码的值判断是不是汉字. 用java写发送短信代码 新手问个有点白痴的问题,怎么安装好jdk怎么设置环境变量,怎么判断java安装成功 十万火急!200分悬赏一个JAVA写的邮件群发程序。(要源码) oralce语句 求教软考中级 请问在JAVA编程中,内部类用的多不多? 如何创建树结构组织? 寻求一种小巧易用的JAVA编程工具。 100分。请大虾帮忙搞定 其实微软不支持java VM也没关系呀,只不过是applet没办用了而以,是吧 请教 动态的求5年后的现在距离现在有多少毫秒,谢谢 低手勿进
char c = '槃';
System.out.printf("%c(U+%X):", c, (int)c);
if(c>='\u4e00' && c<='\u9fbf'){
System.out.println("是汉字");
}else{
System.out.println("不是汉字");
}
}
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?"是汉字":"不是汉字");
}
}
#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.
----------------------------------------------------------------------------------
Unicode码也是用多个字符来表示的,把要表示的字符分解成字节不就行了?楼主说只要判断汉字,你这方法不妥,高位为 1 的字符并不全是汉字啊,比如:★(A1EF、U+2605)等等这些字符。
-------------------------------------------------------------------------------------
以上方法只是给出一个最基础的算法,具体到哪种码表示的汉字,还要看其汉字的编码值来判断使用.