lzj0470 2010-04-30 11:38 采纳率: 0%
浏览 166
已采纳

哪位能解析一下这段代码

[code="java"]
public static int charType(String str) {

    if (str != null && str.length() > 0) {
        byte[] b = str.getBytes();
        byte b1 = b[0];
        byte b2 = b.length > 1 ? b[1] : 0;
        if (getUnsigned(b1) < 128) {
            if ("\"!,.?()[]{}+=".indexOf((char) b1) != -1)
                return CT_DELIMITER;
            return CT_SINGLE;
        } else if (getUnsigned(b1) == 162)
            return CT_INDEX;
        else if (getUnsigned(b1) == 163 && getUnsigned(b2) > 175 && getUnsigned(b2) < 186)
            return CT_NUM;
        else if (getUnsigned(b1) == 163
                && (getUnsigned(b2) >= 193 && getUnsigned(b2) <= 218 || getUnsigned(b2) >= 225
                        && getUnsigned(b2) <= 250))
            return CT_LETTER;
        else if (getUnsigned(b1) == 161 || getUnsigned(b1) == 163)
            return CT_DELIMITER;
        else if (getUnsigned(b1) >= 176 && getUnsigned(b1) <= 247)
            return CT_CHINESE;

    }
    return CT_OTHER;

}
public static int getUnsigned(byte b) {
    if (b > 0)
        return (int) b;
    else
        return (b & 0x7F + 128);
}

[/code]

  • 写回答

5条回答 默认 最新

  • g_johnson_lee 2010-05-04 09:24
    关注

    176对应的是字符'0'的ASCII码,186对应的是字符'9'的ASCII码,所以[code="java"]
    getUnsigned(b2) > 175 && getUnsigned(b2) < 186[/code]的意思是表示'0'-'9'之间的字符,依此类推,193对应的是字符'A'的ASCII码......

    如果哪个数字不知道是什么意思,用下面的代码打印出其对应的ASCII码,然后对照ASCII码表看就明白了:
    [code="java"]
    package org.zergle.test.byte2uint;

    public class Byte2UInt {

    /**
     * @param args
     */
    public static void main(String[] args) {        
        System.out.println((176 - 128) & 0x7F); // '0'
        System.out.println((186 - 128) & 0x7F); // '9'
        System.out.println((175 - 128) & 0x7F); // '/'
        System.out.println((163 - 128) & 0x7F); // '#'
        System.out.println((193 - 128) & 0x7F); // 'A'
        System.out.println((218 - 128) & 0x7F); // 'Z'
        System.out.println((225 - 128) & 0x7F); // 'a'
        System.out.println((250 - 128) & 0x7F); // 'z'
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了