| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4457 人关注过本帖
标题:java中如何区分字符串中的字母和汉字?
只看楼主 加入收藏
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
呵呵,那就str.getBytes("gbk").length吧..

My BlogClick Me
2007-09-04 23:20
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
哈哈哈哈,str.getBytes("utf8").length 支持得更广泛点~~~我日~破坏我生意。。。

淘宝杜琨
2007-09-04 23:38
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 

呵呵,问题是楼上的是错误滴...
试试

\"我日\".getBytes(\"utf8\").length
等于都少就知道了
而且楼主问的是中文字符


My BlogClick Me
2007-09-04 23:47
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
用正则表达式不就行了。[\u4e00-\u9fa5]{1,5},[\w]{1,10}
2007-09-05 02:09
skylence
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-11-15
收藏
得分:0 
怎么弄啊
我也想知道

2007-09-05 16:56
大嘴先生2
Rank: 1
等 级:新手上路
威 望:2
帖 子:815
专家分:0
注 册:2006-4-17
收藏
得分:0 
不会吧
好象占的位数一边多!
没什么区分的
汉字的编码是10000以上也许是唯一区别
老大就是老大!

骑白马的未必是王子,也可能是唐僧;有翅膀的未必是天使,也可能是鸟人。
2007-09-06 11:25
thzhanglixue
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2007-8-14
收藏
得分:0 

谢谢各位大哥,小弟从中学到了不少知识。
这几天实习。太忙了,都瞎忙还没时间上网。真不好意思!我在我的机子上调试以下的方法。值分别如下:
"我日".getBytes().length 值为4
"wori".getBytes().length 值为4
"我日".getBytes("gbk").length 值为4
"wori".getBytes("gbk").length 值为4
"我日".getBytes("utf8").length 值为6
"wori".getBytes("utf8").length 值为4

不过[\u4e00-\u9fa5]{1,5},[\w]{1,10}
这个正则怎么用,小弟不会,是不是用public String[] split(String regex)
方法呢,编译器总提示错误,我也不知那里的问题。
还请各位大哥多多指教。

如果有和我一样的菜鸟请参考下面的附录:(以下摘自网络)
////////////////////////////////////
GBK字库
我们经常使用各种编码标准的汉字,编码到底是什么呢?
所谓编码,是以固定的顺序排列字符,并以此做为记录、存贮、传递、交换的统一内部特征,这个字符排列顺序被称为"编码"。和中文字库有关的编码标准有:国标GB码、GBK码、港台BIG-5码等,不同编码的汉字字库都与汉字的应用有密切关系。
很多人在使用过程中,发现字不够用,因为目前大家使用的主要是GB编码字库,此编码标准只收录了6763个常用汉字,而GB字库以外大量汉字,只能通过方正女娲补字软件拼字或其它造字程序补字。尽管补出的汉字在字形上满足需要,但在字体风格、大小、结构方面难以协调统一,而采用手工贴图的方式补字,更不雅观。进而言之,如果用户建立信息系统,或需要查询新闻、出版内容时,靠补字是无法实现的。方正开发的GBK字库,将极大地缓解缺字现象。
GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定, 1995年12月正式发布,目前中文版的WIN95、WIN98、WINDOWS NT以及WINDOWS 2000都支持GBK编码方案。
从GB字库扩充到GBK字库,增加了1万4千多字。北大方正从1996年投入大量人力,开始做黑、宋、仿、楷GBK字库,并于1998年4月成为第一家通过国家权威部门组织的GBK字库鉴定的专业厂商。到现在为止,北大方正已将全部字体转换成GBK字库,共46款,其中18款字数达21003个,是拥有GBK字库款数最多的厂商。
伴随GBK字库的推广使用,中国新华通讯社于2000年1月1日起开始使用GBK编码向各新闻单位播发新闻稿。2000年4月1日起,中国银行业开始推行"储蓄实名制"。 同时,各种出版物已开始向网络化发展,网上发布新闻、网络出版已是大势所趋,通过网络传播信息的广度和深度对汉字使用提出了更高要求,GBK字库是缓解人名和地名等冷僻字的"当然之选"。
北大方正已为广大用户使用GBK字库做好了充分准备,其出版系统已全面支持GBK字库,如方正书版9.0、方正飞腾从1.0版本、世纪RIP从1.0版本开始就支持GBK字库,用户的补字量将大大降低。
方正GBK字库的使用非常便捷。排版软件方面,目前Windows上大多数文字处理软件,如MS Office、PageMaker、金山WPS等均已支持GBK字库,方正书版9.0、方正飞腾3.6和方正世纪RIP完全支持GBK字库。输入法方面,除了Windows上的全拼、王码五笔等主流输入法支持GBK字库外,北大方正还专门为GBK的输入制作了一本GBK内码字典,用户可以用查字典的方法很快找到汉字的GBK编码完成录入。
/////////////////////////////////////
什么是UTF8
UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:
  以"I am Chinese"为例
   用ANSI储存:12 Bytes
   用Unicode/UCS2储存:24 Bytes + 2 Bytes(header)
   用UCS4储存:48 Bytes + 4 Bytes(header)

  以"我是中国人"为例
   用ANSI储存:10 Bytes
   用Unicode/UCS2储存:10 Bytes + 2 Bytes(header)
   用UCS4储存:20 Bytes + 4 Bytes(header)

  由此可见直接以Unicode/UCS的原始形式来储存是一种极大的浪费,而且也不利于互联网的传输(中文稍为合算一点^_^)。

  有见及此,Unicode/UCS的压缩形式--UTF8出现了,套用官方网站的首句话『UTF-8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也适用于编码UCS,故亦可称为『UCS transformation formats (UTF)』

  UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。


编码原理

先看这个模板:

UCS-4 range (hex.) UTF-8 octet sequence (binary)
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx

编码步骤:
1) 首先确定需要多少个8bits(octets)
2) 按照上述模板填充每个octets的高位bits
3) 把字符的bits填充至x中,字符顺序:低位→高位,UTF8顺序:最后一个octet的最末位x→第一个octet最高位x
4) 解码的原理一样。

实例:(留意每个bit的颜色,粗体字为模板内容)

UCS-4 UTF-8
HEX BIN Bytes BIN HEX Bytes
0000 000A 00001010 4 00001010 0A 1
0000 0099 10011001 4 11000010 10011001 C2 99 2
0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3

  不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。

  以UTF8格式储存的文件档首标识为EF BB BF。


效率

  从上述编码原理中得出的结论是:
   1.每个英文字母、数字所占的空间为1 Byte;
   2.泛欧语系、斯拉夫语字母占2 Bytes;
   3.汉字占3 Bytes。

UTF8的好处:
数据表现:网页可以显示任何语言和文字,只要你的操作系统支持unicode,还有相应的字体,Linux下系统编码为utf8的话,可以解决很多无谓的中文问题,比如mp3播放器或者gtk2.
数据交换:无需那些gb2312和big5之间的转换程序了.
php里著名的"許功蓋"问题,smarty的问题,都可以很好的解决,这方面的以后扩展来介绍:

UTF8的坏处:
用的中文网站还不多,不利于数据交流.
汉字为三个字符,有时varchar不大够用.

不过总体来说还是利大于弊,所以一直用吧


我虽然不比别人强,但每当超越自己的时候就是我最大的快乐!每天多一份快乐,这就是幸福生活!
2007-09-08 21:15
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
呵呵。不错。正则表达式也可以。你就直接判断 string.matches("[\u4e00-\u9fa5]{1,5}")
2007-09-08 21:49
thzhanglixue
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2007-8-14
收藏
得分:0 

谢谢楼上大哥,我明白了。


我虽然不比别人强,但每当超越自己的时候就是我最大的快乐!每天多一份快乐,这就是幸福生活!
2007-09-09 08:53
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
以下是引用thzhanglixue在2007-9-9 8:53:30的发言:

谢谢楼上大哥,我明白了。

哈哈。不用谢。

2007-09-09 11:04
快速回复:java中如何区分字符串中的字母和汉字?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013249 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved