<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
    本來以為isLowerCase只有對"a"-"z"才為true,isUpperCase只有對 "A"-"Z" 才為true,其它情況下都應該是false,誰知道jdk讓我大跌了一回眼鏡:

    public?class?E?{
    public?static?void?main(String[]?args)?{
    ??
    for(?char?c?=?170;?c<65371;c++)
    ????
    if(c==8522)?
    ??????c
    =64255;
    ????
    else?if(Character.isLowerCase(c)||Character.isUpperCase(c))
    ??????System.out.println(c
    +"("+(c-0)+"):"+Character.isLowerCase(c)+"?-?"+Character.isUpperCase(c));
    ?}
    }


    看了一下,isLowerCase()和isUpperCase()是跟著 getType()的返回走的,jdk認為,getType的返回等于 UPPERCASE_LETTER 的就是大寫字母,等于 LOWERCASE_LETTER 的就是小寫字母。這本來也沒有錯。但是 UPPERCASE_LETTER? 和 LOWERCASE_LETTER 是兩個整型常量,他們的定義見:

    http://java.sun.com/j2se/1.4.2/docs/api/constant-values.html

    java.lang.Character
    ...
    ?public static final byte DIRECTIONALITY_RIGHT_TO_LEFT 1
    ?public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC 2
    ...
    ?public static final byte LOWERCASE_LETTER 2
    ...
    ?public static final int MIN_RADIX 2
    ...
    ?public static final byte UPPERCASE_LETTER 1


    Character的常量撞車撞的這么厲害,不知道設計jdk的人是怎么想的。這樣我們getType的時候獲得了1,是沒有辦法知道這個字符是 DIRECTIONALITY_RIGHT_TO_LEFT 的還是 UPPERCASE_LETTER 的,獲得2也沒有辦法知道是 DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC 、MIN_RADIX 還是 LOWERCASE_LETTER 的 ,因此 isLowerCase()和isUpperCase() 通過getType()來判斷是否大小寫字母當然要犯錯誤了。

    要我說,isLowerCase()和isUpperCase()全部用最簡單的寫法來實現,也不需要一個getType()的函數調用過程了,直接:

    function?isLowerCase(ch){
    ????
    return?(ch>='a'?&&?ch<='z');
    }
    function?isUpperCase(ch){
    ????
    return?(ch>='A'?&&?ch<='Z');
    }


    不是挺好嗎?

    常量撞車始終是不對的,JDK為什么要這么干呢?大概是想用二進制位來組合各種type,可是又受限于常量類型被定義為byte型。可是現在的結果是,不但類型常量撞車,各種type還是不能正確的組合。

    posted on 2006-03-23 12:59 emu 閱讀(1916) 評論(4)  編輯  收藏

    評論

    # re: JDK的bug? 2006-03-23 14:24 非魚
    要考慮I18N啊,你ch>='a' && ch<="z"才是BUG呢。  回復  更多評論
      

    # re: JDK的bug? 2006-03-24 09:25 emu
    我不這么認為。isLowerCase什么時候需要關心非英語字母的大小寫了?不管如何I18N(),ch>='a' && ch<='z'都應該是isLowerCase的正確定義啊  回復  更多評論
      

    # re: JDK的bug? 2006-03-24 11:07 charon@xxx
    當然要關心了,希臘字母也有大小寫來著
      回復  更多評論
      

    # re: JDK的bug? 2006-03-25 10:39 emu
    是的,再看了一下JDK文檔:

    The following are examples of uppercase characters:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    '\u00C0' '\u00C1' '\u00C2' '\u00C3' '\u00C4' '\u00C5' '\u00C6' '\u00C7'
    '\u00C8' '\u00C9' '\u00CA' '\u00CB' '\u00CC' '\u00CD' '\u00CE' '\u00CF'
    '\u00D0' '\u00D1' '\u00D2' '\u00D3' '\u00D4' '\u00D5' '\u00D6' '\u00D8'
    '\u00D9' '\u00DA' '\u00DB' '\u00DC' '\u00DD' '\u00DE'

    Many other Unicode characters are uppercase too.

    上面兩位說的有理。  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲熟妇丰满多毛XXXX| 国产精品久免费的黄网站| 亚洲av无码成人黄网站在线观看 | 亚洲精华液一二三产区| 久久福利资源网站免费看| 亚洲AV无码第一区二区三区| 免费一级毛片无毒不卡| 午夜亚洲国产理论秋霞| 3d成人免费动漫在线观看| 91天堂素人精品系列全集亚洲| 91香蕉国产线观看免费全集| 亚洲精品中文字幕麻豆| 91情侣在线精品国产免费| 亚洲日产2021三区在线 | 亚洲va中文字幕无码| 成人午夜影视全部免费看| 亚洲欧洲日产国码高潮αv| 国产成人精品免费大全| 亚洲AV无码AV男人的天堂| 99久久久国产精品免费牛牛| 亚洲一区二区久久| 国产美女精品久久久久久久免费| 免费一级特黄特色大片| 人人狠狠综合久久亚洲婷婷| 色片在线免费观看| 亚洲AV成人一区二区三区观看| 亚洲精品tv久久久久| baoyu777永久免费视频| 亚洲欧洲日产国码二区首页| 超pen个人视频国产免费观看| a在线视频免费观看在线视频三区| 亚洲αv久久久噜噜噜噜噜| 免费精品人在线二线三线区别 | 亚洲午夜精品久久久久久人妖| 免费大片黄在线观看yw| 老妇激情毛片免费| 久久国产精品亚洲综合| 国产精品免费视频播放器| 四虎国产精品免费永久在线| 亚洲精品综合在线影院| 激情97综合亚洲色婷婷五|