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();
        }*/
    }

}

猜你喜欢

转载自blog.csdn.net/m0_37438942/article/details/84975387