String,StringBuffer和StringBuilder

来源:互联网 发布:知乎 美国经典电影 编辑:程序博客网 时间:2024/06/05 08:58

一. String常用方法:

public class StringDemo {    public static void main(String[] args) {        /**1.获取**/        String s1 = "abcdabcd";        //1.1 字符串长度        pri(s1.length());    //8        //1.2 指定索引处的字符        pri(s1.charAt(1));    //b        //1.3 字符(串)第一次出现的位置        pri(s1.indexOf("bc"));  //1        //1.4 从某个索引开始,字符(串)第一次出现的位置        pri(s1.indexOf("bc", 3));  //5        //1.5 逆序查看字符(串)第一次出现的位置        pri(s1.lastIndexOf("bc"));   //5        //1.6 从某个索引开始,逆序查看字符(串)第一次出现的位置        pri(s1.lastIndexOf("bc", 4));  //1        //1.7 获取字符串中的一部分(包含头不包含尾)        pri(s1.substring(2, 5));  //cda        /**2.判断**/        String s2 = "StringDemo.java";        //2.1 字符串是否包含某个子串        pri(s2.contains("Demo"));  //true        //2.2 字符串是否为空        pri(s2.isEmpty());   //false        //2.3 字符串是否以..开始        pri(s2.startsWith("String"));  //true        //2.3 字符串是否以..结束        pri(s2.endsWith(".java"));   //true        /**3.转换**/        //3.1 字符数组转换为字符串        char[] arr = {'a','b','c','d','e','f'};        String s3 = new String(arr,2,3); //构造方法          pri(s3.copyValueOf(arr, 2, 3));  //静态方法        pri(s3);  //cde        //3.2字符串转换为字符数组        char[] arr2 = s3.toCharArray();        for(int i = 0;i<arr2.length;i++)            pri(arr2[i]);        //3.3 字节数组转成字符串        //String s = new String(byte[],offset,count)        //3.4 字符串转成字节数组        //byte[] b = s.getBytes();        /**4.替换**/        String s4 = "hello java";        pri(s4.replace("java", "world"));  //hello world        /**5.切割**/        String s5 = "张三,李四,王五";        String[] s = s5.split(",");        for(int i = 0 ;i<s.length; i++)            pri(s[i]);        /**6.字符串转成大写或小写**/        pri(s4.toUpperCase());  //HELLO JAVA        pri(s4.toLowerCase());  //hello java        /**7.去除两端的空格**/        String s6 = "   hello   world   ";        pri(s6.trim());  //hello   world        /**8.两个字符串进行自然顺序比较,返回第一个不相等的字符的ASCII码的差(前减后)**/        String s7 = "acc";        String s8 = "aaa";        pri(s7.compareTo(s8)); //2    }    public static void pri(Object obj){        System.out.println(obj);    }}

二. StringBuffer常用方法:

public class StringBufferDemo {    public static void main(String[] args) {        StringBuffer sb=new StringBuffer("abcde");        /**1.添加**/        //1.1 StringBuffer append():将指定数据作为参数添加到已有数据结尾处        sb.append("fgh");    //abcdefgh        //1.2 StringBuffer insert(index,data):将数据插入到指定index位置        sb.insert(2,"fgh");  //abfghcde        /**2.删除**/        //2.1 StringBuffer delete(start,end):删除缓冲区的一段数据        sb.delete(2, 4);   //abe        //2.2 StringBuffer deleteCharAt(index):删除指定位置的字符        sb.deleteCharAt(2);   //abde                /**3.获取**/        //3.1 char charAt(index)        System.out.println(sb.charAt(2));  //c        //3.2 int indexOf(String str)        System.out.println(sb.indexOf("c")); //2        //3.3 String substring(start,end)        System.out.println(sb.substring(2,5));  //cde        /**4.修改**/        //4.1 StringBuffer replace(start,end,str)        System.out.println(sb.replace(2,4,"hhh")); //abhhhe        //4.2 void setCharAt(index,ch)        sb.setCharAt(2,'h');  //abhde        /**5.数据存到字符数组**/        //getChars(srcBegin, srcEnd, dst, dstBegin)        char[] str=new char[5];        sb.getChars(2, 5, str, 0);  //cde    }}

三. String,StringBuffer,StringBuilder对比

  1. 执行速度上:StringBuilder > StringBuffer > String
  2. String类是不可变类,一旦创建,无法修改,每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象
  3. StringBuffer是可变类,任何对它所指代的字符串的改变都不会产生新的对象
  4. StringBuffer和StringBuilder的原理和操作基本相同,区别在于StringBuffer是线程同步的,StringBuilder是线程不同步,StringBuffer安全性更高,但加锁解锁导致其速度慢于StringBuilder

    对于三者使用的总结: 1.如果要操作少量的数据用 - String

               2.单线程操作字符串缓冲区 下操作大量数据 - StringBuilder

               3.多线程操作字符串缓冲区 下操作大量数据 - StringBuffer

原创粉丝点击