/**
* 判断一个字符的类型
*
* @param str
* 需要判断的文本。
* @return num 数字 char 英文/拼音 zh 中文 null 出错。
*/
public String getCharType(char str) {。
String txt = str + "";。
Pattern p = Pattern.compile("[0-9]*");。
Matcher m = p.matcher(txt);。
if (m.matches()) {// 输入的是数字。
return "num";
p = Pattern.compile("[a-zA-Z]");。
m = p.matcher(txt);。
if (m.matches()) {// 输入的是字母。
return "char";
p = Pattern.compile("[\u4e00-\u9fa5]");。
m = p.matcher(txt);。
if (m.matches()) {// 输入的是汉字。
return "zh";
return null;// 其实应该抛异常比较合适。
一般来说,首先要确定汉字的特征,比如国标,连续两个字符,每个字符的ASCII码均大于127,或者说有符号字符取值为负,无符号字符二进制最高位为1,可以判定这两个字符组成一个汉字。其他汉字编码需要具体情况具体分析,根据编码的特点,也有3字符表示汉字的情况。
可以这样简单地判断:
普通字符串,其组成是由ASCII码小于等于127的字符,当字符串类型是由有符号的char类型时,判断其ASCII码在0~127之间即为通用ASCII字符,如果是负值,则算是扩展ASCII字符,一般汉字都是用连续两三个扩展ASCII字符表示的,所以判断ASCII是否小于0即可;如果字符串类型是无符号的unsigned char则可以判断汉字字符大于127。
根据GB2312-80标准,每个汉字的机内码由二个字节组成,每个字节的最高位均为1。
是以程序可以判断:
#include<stdio.h>。
int main()
{int i,k=1,j=0;。
unsigned char s[100];。
gets(s);
for(i=0;s[i];i++)。
if(s[i]>128){k=0;j++;}。
if(j==i)printf("\"%s\"全部是由汉字组成\n",s);。
else if(k)printf("\"%s\"中没有中文\n",s);。
else printf("\"%s\"中有部分汉字\n",s);。
system("pause");。
用正则表达式就行了呀,至于怎么写与正则表达式,可以参考站长之家的站长工具里的正则表达式。
代码如下下面是一个函数,判断字符串是否仅由汉字组成:
function ishans(s)。
dim regex as object。
set regex=createobject("vbscript.regexp")。
regex.global=true。
regex.pattern="^[\u2e80-\ufe4f]+$"。
'这个pattern就是正则表达式。
ishans=regex.test(s)。
set regex=nothing。
end function