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

哪位能解析一下这段代码

[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条)

报告相同问题?