急问:对于一个字符,如果判断其是否为汉字? 我试了一下,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码的值判断是不是汉字. jxl操作excel,如何能获取某个单元格的超链接? 帮忙看下这段Java就一句话 java rmi 是用来解决什么矛盾的? 汗。。。请问怎么往文件里写一个双引号(") 菜鸟请教一个关于appletviewer问题 打包时候为何类文件进不去 请教一个ComboBox的问题,如何在选择其中的项的时候不让下拉框自动收回? 简单问题:怎么得到窗口中控件(如按钮)相对与屏幕的位置 一个送分的问题 jdbc连接数据出现一个疑问? 请教 动态的求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)等等这些字符。
-------------------------------------------------------------------------------------
以上方法只是给出一个最基础的算法,具体到哪种码表示的汉字,还要看其汉字的编码值来判断使用.