JAVA解惑-字串(二)

來源:互聯網
上載者:User
  1. 來個兩個有趣的例子:

    1。URL的愚弄,難道SUN對google的待遇很特殊??

    public class BrowserTest {
        public static void main(String[] args) {
            System.out.print("iexplore:");
            http://www.google.com;
            System.out.println(":maximize");
        }
    }

    上面這個例子能運行嗎?你確定嗎?是的,我確定,這個例子可以完全正常地運行。為什嗎?這個例子等價於:

    public class BrowserTest {
        public static void main(String[] args) {
            System.out.print("iexplore:");
            http:

            //www.google.com;
            System.out.println(":maximize");
        }
    }

    哈哈,http只是作為標籤(label),因為JAVA沒有goto語句,它是通過label和continue語句來類比的。而//www.google.com;只是注釋。我第一次看見這個例子的時候也被搞混了。

    2。完全用UNICODE表示的程式:請把下面這段“代碼”放進一個Ugly.java的檔案中,編譯運行即可,輸出老掉牙的Hello World。

    /u0070/u0075/u0062/u006c/u0069/u0063/u0020/u0020/u0020/u0020
    /u0063/u006c/u0061/u0073/u0073/u0020/u0055/u0067/u006c/u0079
    /u007b/u0070/u0075/u0062/u006c/u0069/u0063/u0020/u0020/u0020
    /u0020/u0020/u0020/u0020/u0073/u0074/u0061/u0074/u0069/u0063
    /u0076/u006f/u0069/u0064/u0020/u006d/u0061/u0069/u006e/u0028
    /u0053/u0074/u0072/u0069/u006e/u0067/u005b/u005d/u0020/u0020
    /u0020/u0020/u0020/u0020/u0061/u0072/u0067/u0073/u0029/u007b
    /u0053/u0079/u0073/u0074/u0065/u006d/u002e/u006f/u0075/u0074
    /u002e/u0070/u0072/u0069/u006e/u0074/u006c/u006e/u0028/u0020
    /u0022/u0048/u0065/u006c/u006c/u006f/u0020/u0077/u0022/u002b
    /u0022/u006f/u0072/u006c/u0064/u0022/u0029/u003b/u007d/u007d

    哈哈,是好玩,可苦了看程式的人,所以盡量避免使用轉義符吧。

    3。看看下面這個例子,列印什嗎?

    public class LastLaugh {
        public static void main(String args[]) {
            System.out.print("H" + "a");
            System.out.print('H' + 'a');
        }
    }
    哈?下半聲我笑不出來了,列印出來的是Ha169。道理很簡單,+號只對String 類型做了重載,而char類型沒有,所以第2個輸出語句其實是把char轉為int,再進行+操作,即72+97。解決此問題可以在前面加個Null 字元串:

        System.out.print(""+'H' + 'a');

    或者JDK5中使用printf,System.out.printf("%c%c",'H','a');

     

    4。字串乳酪:

    public class StringCheese {
        public static void main(String args[]) {
            byte bytes[] = new byte[256];   
            for(int i = 0; i < 256; i++)
                bytes[i] = (byte)i;
            String str = new String(bytes);
            for(int i = 0, n = str.length(); i < n; i++)
                System.out.print((int)str.charAt(i) + " ");
        }
    }
    你可能以為會列印從0到255,可惜結果卻不一定,這依賴於你的平台的預設字元集。我的機器上預設是GBK,這個程式只有在字元集是ISO-8859-1時才可以,所以可以改成:

    String str = new String(bytes,"ISO-8859-1");

    平台的預設字串在JDK5中使用java.nio.charset.Charset.defaultCharset()來查詢。

     

    5。另一個需要注意的是String的replaceAll的方法第一個參數是Regex,而不是常量字串。你可以使用String的replace方法來替代。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.