黑马程序员_String-StringBuffer-StringBuilder

来源:互联网 发布:国家纳米科学中心 知乎 编辑:程序博客网 时间:2024/05/14 17:34


一、String

String对象在内存中的存储位置

public static void main(String[] args) {

        String str1="abc";

        String str2="abc";

        System.out.println(str1==str2);

 

    }

String对象内容存储在内存中的常量池中;创建字符串对象时会在内存中查找,如果已经存在,则不会新开辟空间,所以示例中的返回值为true

 

String常用方法:

 1、获取:
        (1)int length():获取长度,字符串中包含的字符数,也就是字符串的长度,字符串是方法,数组是属性
        (2)、根据位置获取位置上的某个字符

char charAt(int index)

(3)根据字符获取该字符在字符串中的位置

            int indexOf(int ch):返回的是ch在字符串中第一次出现的位置

            int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置            

            int indexOf(String str):返回的是ch在字符串中第一次出现的位置

            int indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置

 

    2、判断:
        (1)、字符串中是否包含一个子串
            boolean contains(CharSequence s)     特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。

            if(str.indexOf("aa")!=-1)  该方法既可以判断,也可以获取出现的位置
        (2)、字符串中是否有内容
            boolean isEmpty()  原理是判断长度是否为0,“” null不一样
        (3)、字符串是否以指定内容开头
            boolean startsWith(str)
        (4)、字符串是否以指定内容结尾
            boolean endsWith(str)
        (5)、判断字符串内容是否相同
            boolean  equals(str);
        (6)、判断内容是否相同,并忽略大小写
            boolean equalsIgnoreCase(str);

(7)、示例:

public class Demo{      public static void method_is(){          String str = "ArrayDemo.java";          //判断是否以array开头          sop(str.startsWith("Array"));          //判断是否以.java结尾          sop(str.endsWith(".java"));          //是否包含demo          sop(str.contains("Demo"));      }      public static void method_get(){          String str = "abcdef";          //长度          sop(str.length());          //根据索引获取字符          sop(str.charAt(4));//当访问到字符串中不存在的角标时,会发生角标越界(StringIndexOutOfBoundsException )         //根据字符获取索引          sop(str.indexOf('a'));          //在指定位置,根据字符获取索引          sop(str.indexOf('a',40));//如果没有找到,返回-1          //反向索引一个字符出现的位置          sop(str.lastIndexOf('f'));      }      public static void sop(Object obj){          System.out.println(obj);      }      public static void main(String[] args){          method_is();        method_get();    }      }

    3、转换

           (1)、将字符数组转成字符串
                  构造函数:
                           String(char[] value) 
                           String(char[] value, int offset, int count)将字符数组一部分转成字符串
                    静态方法:
                           static String copyValueOf(char[] data);
                         static String copyValueOf(char[] data,int offset,int count);
                            static String ValueOf(char[] data);     

          (2)、将字符串转成字符数组

        byte[] getBytes() 
        byte[] getBytes(Charset charset)          

  (3)、将字节数组转成字符串

        String(byte[] value) 
        String(byte[] value, int offset, int count)将字节数组一部分转成字符串          

  (4)、将字符串转成字节数组

        char[] toCharArray()  将此字符串转换为一个新的字符数组  

          (5)、将基本数据类型转成字符串

        static String valueOf(double d) 
        static String valueOf(int i) 

                特殊:字符串恶化字节数组在转换过程中,是可以指定编码表的。      

          (6)、转换

            将字符串转换成大写或小写

                  String  toUpperCase();              

                  String  toLowerCase();

         (7)、示例:

public class Demo{      public static void main(String[] args){          method_trans();      }      public static void method_trans(){          char[] arr = {'a','b','c','d','e','f'};          String s = new String(arr,1,3);          sop("s="+s);         String s1="zhangsan";        char [] ch=s1.toCharArray();        for(int x=0;x<ch.length;x++){            sop("ch="+ch[x]);        }                }      public static void sop(Object obj){          System.out.println(obj);      }  }  

4、切割和替换 

         (1)、替换

        String replace(char oldChar,char newChar)  

          (2)、切割

        String[] split(String str)   

        (3)、子串,获取字符串中的一部分,

        String substring(int beginIndex)  
        String substring(int beginIndex, int endIndex) //包含头,不包含尾部

         (4)、示例:

public class Demo{      public static void main(String[] args){          method_sub();      }      public static void method_split(){          String s = "zhangsan,lisi,wangwu";          String[] arr = s.split(",");          for(int i=0;i<arr.length;i++){              sop(arr[i]);          }      }      public static void method_sub(){          String s = "abcdef";          sop(s.substring(2));    //从指定位置开始到结尾,如果交表不存在,会出现字符串角标越界异常          sop(s.substring(2,4));    //包含头,不包含尾部  。s.substring(0,s.length());    }      public static void sop(Object obj){          System.out.println(obj);      }  }

5、比较和去除空格
    (1)、将字符串转成大写或者小写
        [1]String toUpperCase();
        [2]String toLowerCase();
    (2)、将字符串两端的多个空格去除
        String trim();
    (3)、对两个字符串进行自然顺序的比较
        int compareTo(String);
        如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 的值。返回 他们 ascle 码值相减的结果
(4)、示例:

public class Demo{      public static void main(String[] args){          method_7();      }      public static void method_split(){          String s = "zhangsan,lisi,wangwu";          String[] arr = s.split(",");          for(int i=0;i<arr.length;i++){              sop(arr[i]);          }      }      public static void method_sub(){          String s = "abcdef";          sop(s.substring(2));    //cdef          sop(s.substring(2,4));    //cd  包含头,不包含尾部      }      public static void method_7(){          String s = "         Hello Java       ";          sop(s.toLowerCase());          sop(s.toUpperCase());          sop(s.trim());          String s1 = "acc";          String s2 = "aaa";          sop(s1.compareTo(s2));//2          sop(s2.compareTo(s1));//-2      }      public static void sop(Object obj){          System.out.println(obj);      }  } 


二、StringBuffer 

Stringbuffer

           Stringbuffer是字符串缓冲区,是一个容器
               长度可变化
               可以操作多个数据类型
               最终会通过toString方法变成字符串         

          StringBuffer可以对字符串内容进行增删

StringBuffer常用方法:    

            1、存储
                      StringBuffer append():将指定数据作为参数添加到已有数据结尾处
                    StringBuffer insert(index,数据):可以将数据插入到指定位置上去
              2、删除
                      StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end
                      StringBuffer deleteCharAt(index):删除指定位置的字符
                      sb.delete(0,sb.length());  清空缓冲区,删除全部
                      sb.delete(2,3);  删除一个字符,应该用 sb.deleteCharAt(2);
               3、获取
                      char charAt(int index)
                       int indexOf(String str)
                       int lastIndexOf(String str)
                       int length()
                      String substring(int start,int end)  注意,返回的是string,不是StringBuffer
                  4、修改
                      StringBuffer replace(start,end,string);
                       StringBuffer reverse()  
                      void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 
                 5、示例:

public class Demo{      public static void main(String[] args){          method_getChars();      }      public static void method_getChars(){          StringBuffer sb = new StringBuffer("abcdef");          char[] chs = new char[4];          sb.getChars(1,4,chs,1);          for(int x=0;x<chs.length;x++){              sop("chs["+x+"]="+chs[x]+";");          }       }      public static void method_update(){          StringBuffer sb = new StringBuffer("abcde");          sb.replace(1,4,"java");          sop(sb.toString());      }      public static void method_del(){          StringBuffer sb = new StringBuffer("abcde");          sb.delete(0,sb.length());          //sb.delete(1,3);//删掉 bc,2两个,因为不包含尾          sop(sb.toString());      }      public static void method_add(){          StringBuffer sb = new StringBuffer();          sb.append("abc").append(true).append(34);//方法调用链          sb.insert(1,"qq");          sop(sb.toString());      }          public static void sop(Object obj){          System.out.println(obj);      }  }  

三、StringBuilder
StringBuilder
    1JDK 1.5 之后,出现了StringBuilder
    2、一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
        (1)StringBuffer 是线程同步  多线程也可以,自身有判断锁,但是效率低
        (2)StringBuilder 是线程不同步  不是多线程的,不用判断锁,所以单线程都用这个
    3、升级三个因素
        (1)、提高效率
        (2)、简化书写
        (3)、提高安全性

 

   4StringBuilder >与 StringBuffe的区别

    (1)  、在执行速度方面的比较:StringBuilder >  StringBuffer   

        (2)  StringBufferStringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了

        (3)、 StringBuilder:线程非安全的;StringBuffer:线程安全


0 0
原创粉丝点击