SentralLiu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

====================String的创建===================
字符串类的创建:

public class CreateTest {
    public static void main(String[] args) {
        String a = "hello";  //直接赋值创建对象
        String aa  = "hello";
        System.out.println(a==aa);  //true
        
        String b = new String("hello");
        String bb = new String("hello");
        System.out.println(b==bb);  //false
        
        //一般比较字符串相同,使用equals--比较内容
        System.out.println(b.equals(bb)); //true
        
    }
}



====================String的常用方法===================
String类: 不可变字符串
不可变字符串:调用任何方法,不会改变原对象的值

public class MethodTest {
    public static void main(String[] args) {
        String a = "hello";
        System.out.println(a.charAt(0));  //获取该下标的字符,下标从0开始
        
        String b = a.concat("world");  //字符串拼接--helloworld
        System.out.println(b);  //hello
        
        System.out.println(a.contains("hel"));    //是否包含子串
        
        char[] c = a.toCharArray();  //将字符串转字符数组返回
        System.out.println(Arrays.toString(c));
        
        System.out.println(a.length());  //求长度
        System.out.println(a.indexOf("ll"));  //根据传入的子串,得到下标
        System.out.println(a.toUpperCase());  //小写转大写
        System.out.println(a.startsWith("h")); //true
        System.out.println(a.startsWith("hello"));  //true
        System.out.println("  h e ".trim());  //去除左右空格
        
        String d = "暴力的黄色小说,很暴力";
        //replace:完全匹配的替换
        System.out.println(d.replace("暴力", "xx")); //
        //replaceAll:正则表达式替换,可以完全匹配也可以按规则;
        //例如: 手机号替换;规则:1开头,长度11,必须都数字   dd13833388833ff
        System.out.println(d.replaceAll("暴力", "xx")); //
        
        String[] dd = d.split(",");  //按某个字符串进行分割,返回字符串数组
        System.out.println(Arrays.toString(dd));
        
        System.out.println(a.substring(1)); //从下标1开始提取子串到最后
        System.out.println(a.subSequence(1, 3)); //包括起始下标,不包括终止下标
    }
}

3. 可变字符串(重点)

可变字符串(StringBuffer、StringBuilder)
调用任何方法,可以改变原对象的值
有了不可变字符串,为什么需要可变字符串?   提升性能 

 

StringBuffer、StringBuilder区别(扩展先了解)
在使用上都是一样的,只是StringBuffer加了锁,更安全,性能低;
StringBuilder没加锁,不安全,性能高
应用场景:
在单线程(一条执行通道)中倾向用StringBuilder,性能更好,因为不存在不安全的情况
在多线程中倾向用StringBuffer,考虑安全为主

public class Test1 {
    public static void main(String[] args) {
        //可变字符串的创建
        StringBuilder sb = new StringBuilder("hello");
        //StringBuilder sb2 = "dd"; //注意:不能直接赋值字符串
        sb.append("world");  //字符串追加
        System.out.println(sb);
        
        //StringBuilder与String性能PK---通过反编译工具查看
        long start = System.currentTimeMillis();
        //String a = "";
        for(int i=0;i<10000;i++) {
            //a += i;
            sb.append(i);
        }
        System.out.println(System.currentTimeMillis()-start);
        
        System.out.println(sb.toString()); //转字符串返回
        
        //System.out.println(sb.reverse());  //字符串反转
        
        System.out.println(sb.delete(3, 6)); //删除指定起始下标和终止下标字符串,不包括终止下标
        
    }
}

posted on 2021-10-27 19:04  SentralLiu  阅读(42)  评论(0)    收藏  举报