2 zhenglingkun zhenglingkun 于 2013.03.28 14:13 提问

如何判断一个特殊字符是英文的还是中文的?

我这里要做一个输入的判断,汉字、英文和数字我都能识别出,特殊字符里面分有中文和英文的,不知道怎么区别,各位有没有什么方法解决?

9个回答

sasuke38
sasuke38   2013.03.28 16:20
已采纳
        String str = "我爱你,xr.";
        char[] array = str.toCharArray();
        int chineseCount = 0;
        int englishCount = 0;
        for (int i = 0; i < array.length; i++) {
            if((char)(byte)array[i]!=array[i]){
                chineseCount++;
            }else{
                englishCount++;
            }
        }

这个是加入计数后的代码 可以计算中文字符和英文字符个数 其中中文字符包含汉子 英文字符包含字母

rihui1hao
rihui1hao   2013.04.03 18:48
String s="你";
        if(String.valueOf(s.charAt(0)).getBytes().length==2){
            System.out.println("是中文");
        }else{
            System.out.println("不是中文");
        }
suannai0314
suannai0314 帮你编辑了下代码格式,更多markdown使用见http://ask.csdn.net/pages/markdown
接近 5 年之前 回复
luofl1992
luofl1992   2013.04.01 13:58

中文的字符ASCII码值在128—255之间(或者是小于零,中文字符一般占用两个字节),英文的字符ASCII码值在0—128之间。

pennons
pennons   2013.03.28 14:57
String ss = "你";
Pattern pattern=Pattern.compile("[\u4e00-\u9fa5]");  
Matcher matcher=pattern.matcher(ss);  

用正则
matcher为true是中文

hooopo
hooopo \u4e00-\u9fa5不是全部中文吧?
接近 5 年之前 回复
sasuke38
sasuke38   2013.03.28 14:59
        char[] myChar = s.toCharArray();
        for (int i = 0; i < myChar.length; i++) {
            if ((char) (byte) myChar[i] != myChar[i]) {
                //中文相关字符
            }
        }

试一下这个看看可以么

zhenglingkun
zhenglingkun 谢了啊!我试试看行不行!
接近 5 年之前 回复
sasuke38
sasuke38 这个高低位我不是很懂啊 所以你自己查资料然后看着办吧
接近 5 年之前 回复
zhenglingkun
zhenglingkun 你看这样行不行,凡是myChar[i] > 127的都是中文状态下输入的,小于或等于的都是英文状态下输入的?
接近 5 年之前 回复
sasuke38
sasuke38 比如说吧 中文字符占两个字节 但是你看我的强转 明显是一个char转成一个byte所以当然会信息丢失了 这样子强转出来的byte再也转换不回去原来的char了 这个刚开始学变成老师应该讲过
接近 5 年之前 回复
zhenglingkun
zhenglingkun 是不分开的,(byte) myChar[i] != myChar[i]还是这句话我不太明白,你把一个字符转换成了byte,怎么就和它本身不相等了呢?
接近 5 年之前 回复
sasuke38
sasuke38 文字文字和中文符号不分开计算吧 英文字母和英文符号也不分开计算吧 这样的话我的方法中加个else就可以一并计算非中文个数了 但是如果分开的话我的方法就行不通
接近 5 年之前 回复
zhenglingkun
zhenglingkun 我说我遇到的问题就是计算输入的个数
接近 5 年之前 回复
sasuke38
sasuke38 就好比 我说:今晚洗澡洗得干净就很爽洗不干净也很爽
接近 5 年之前 回复
sasuke38
sasuke38 无缘无故你说这句话我不是太理解
接近 5 年之前 回复
zhenglingkun
zhenglingkun 计算输入的数字,是汉字或者是字符的就减一,英文和英文字符的就输入两个减一!
接近 5 年之前 回复
sasuke38
sasuke38 中文标点也是中文字符吧
接近 5 年之前 回复
sasuke38
sasuke38 好像是中文字符无法直接强转为byte 所以强转之后数据发生改变,当我把byte再次转为char的时候就和以前不同了
接近 5 年之前 回复
zhenglingkun
zhenglingkun (byte) myChar[i] != myChar[i]这样判断不太明白什么意思?
接近 5 年之前 回复
usniyo
usniyo   2013.03.28 15:11
public static String distinguish(String src) {
    String result = "";

    Pattern p;
    Matcher m;

    p = Pattern.compile("[\u4e00-\u9fa5]");
    m = p.matcher(src);
    if (m.find()) {
        result = result + "有汉字  ";
    }

    p = Pattern.compile("[a-zA-Z]");
    m = p.matcher(src);
    if (m.find()) {
        result = result + "有字母  ";
    }

    p = Pattern.compile("[0-9]");
    m = p.matcher(src);
    if (m.find()) {
        result = result + "有数字  ";
    }

    p = Pattern.compile("\\p{Punct}");
    m = p.matcher(src);
    if (m.find()) {
        result = result + "有标点符号  ";
    }

    return result;
}
zhenglingkun
zhenglingkun 我是想识别出标点符号是英文状态下输入的还是中文状态下输入的
接近 5 年之前 回复
baimy1985
baimy1985   2013.03.28 15:16
 int[] params = SmsMessage.calculateLength(text, false);
  /* SmsMessage.calculateLength returns an int[4] with:
  *   int[0] being the number of SMS's required,
  *   int[1] the number of code units used,
  *   int[2] is the number of code units remaining until the next message.
  *   int[3] is the encoding type that should be used for the message.

android Mms的源码里是用这个判断的 int[3]是你要参考的值, 只是感觉这么做对你的需求来说有点麻烦了

zhenglingkun
zhenglingkun 能详细说一下吗?不太明白那几个是什么意思?
接近 5 年之前 回复
xinyoulingxi1_tong
xinyoulingxi1_tong   2013.03.28 15:21

不知道这样有没有用,可以试试正则表达式

boolean result = yourString.contains("[-+.^:,]");
zhenglingkun
zhenglingkun 我是想识别出标点符号是英文状态下输入的还是中文状态下输入的
接近 5 年之前 回复
loFataMer
loFataMer   2013.03.28 15:34

这个方法检测特殊字符:

Pattern p = Pattern.compile("[&%$#@!()*^]"); //<---- you can add more characters to check here 
Matcher m = p.matcher(myEditText2);
if (m.find()) {
    editText.setError("you can not enter special Character");
    return false;
}

导入包:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!