1. 程式人生 > >String使用詳解

String使用詳解

public class TestString {

    @Test
    public void test(){
        String a = "an.jun.shuang";
        String str_a = new String("an.jun.shuang");
        String aCase = "an.Jun.Shuang";
        String b = "wu.ying";
        StringBuffer stringBuffer = new StringBuffer("an.jun.shuang");
        String cs_1 = null;
        String cs_2 = "";
        String trim_t1 = " an jun shuang ";
        System.out.println(a.substring(3));
        //3<=a<6
        System.out.println(a.substring(3,6));
        System.out.println(a.replace("a", "w"));
        System.out.println(a.replaceFirst("a","w"));
        System.out.println(a.concat(b));
        //轉義
        String aa[] = a.split("\\.");
        String aaa[] = a.split("\\.", 3);
        for(int i=0;i<aaa.length;i++) {
            System.out.println(aaa[i]);
        }
        System.out.println(a.charAt(0));
        //unicode編碼
        System.out.println(a.codePointAt(0));
        //前一個字元的unicode編碼
        System.out.println(a.codePointBefore(1));
        System.out.println(a.codePointCount(0,6));
        //按照欄位順序比較兩個字串
        //1.如果第一個引數的第一個欄位不等,結束比較,返回它們之間的差值...以此類推。
        System.out.println(a.compareTo(b));
        System.out.println("a".compareTo("w"));
        //相等返回0,不相等返回unicode差值
        System.out.println(a.compareToIgnoreCase(aCase));
        System.out.println(a.contains("a"));
        System.out.println(a.equals(str_a));
        System.out.println(a.equals(stringBuffer));
        System.out.println(a.contentEquals(stringBuffer));
        System.out.println(a.startsWith("an.jun.shuang"));
        System.out.println(a.endsWith("an.jun.shuang"));
        System.out.println(a.indexOf("n"));
        System.out.println(a.indexOf("n",2));
        System.out.println(a.indexOf(4));
        System.out.println(a.indexOf(4,8));
        //javav中有8中基本型別和一種比較特殊的String,這個特殊的String是為了讓它執行的更快,更節省記憶體,都提供了一種常量池的概念
        //常量池類似一個java系統級別的快取,8中基本型別的常量池都是系統調節的。String型別的常量池有兩種使用方法。
        //1.直接用雙引號宣告的字串會儲存在常量池中。
        //2.不是用雙引號宣告的字串可以用intern方法檢測,如果常量池中不存在該字串,就把該字串放在常量池中。
        //執行過程,常量池中有該字串,就返回該字串,沒有該字串,先放在常量池中,在返回此字串。
        System.out.println(a.intern());
        //null--NullPointerException
        //System.out.println(cs_1.isEmpty());
        //""---true
        System.out.println(cs_2.isEmpty());
        System.out.println(trim_t1.trim());
        System.out.println(trim_t1.replace(" ",""));
        //如果物件呼叫了wait方法就會使持有該物件的執行緒把該物件的控制權交出去,然後處於等待狀態。
        //如果物件呼叫了notify方法就會通知某個正在等待這個物件的控制權的執行緒可以繼續執行。
        //如果物件呼叫了notifuAll方法就會通知所有等待這個物件的控制權的執行緒可以繼續執行。
        //wait方法通過引數指定等待的時間,如果沒有指定時間,預設一直等待下去,直到被通知。
        //1.任何一個時刻,物件的控制權(monitor)只能被一個執行緒擁有。
        //2.無論是執行物件的wait、notify還是notifyAll方法,必須保證當前執行的執行緒取得了該物件的控制權(monitor)。
        //3.如果在沒有控制權的執行緒裡執行物件的以上三種方法,就會報java.lang.IllegalMonitorStateException異常。
        //4.JVM基於多執行緒,預設情況下不能保證執行時執行緒的時序性
        //執行緒取得控制權的方法有三:
        //1.執行物件的某個同步例項方法。
        //2.執行物件對應類的同步靜態方法。
        //3.執行對該物件加同步鎖的同步塊。
        /*a.notify();
        a.notifyAll();
        try {
            a.wait();
            a.wait(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }*/
    }

}