美文网首页
Java常用类

Java常用类

作者: 知止9527 | 来源:发表于2019-02-12 13:45 被阅读0次

    String类

        表示的是不可变的字符串对象!

        使用的方法所产生的字符串返回值,都是新的字符串对象。

        本质原因是在其内部存储数据的字符数组,都是final修饰的。无       法进行二次赋值

            String构造方法:

                    String(String original);

                    String (byte[] bys);

                    String (char []  chs);

                    String  (byte[] bys, int off,int len);

                     String  (char[] chs,int off, int len);

    除了第一种,都是在堆中创建字符串对象!!然后再把字符串拷贝到常量池中做一个备份!!!

    常量池的主要作用:复用!!

    第一种是先在常量池中创建一个参数字符串,然后再去堆中创建字符串对象。

    常用方法:

         1.  int length();返回字符串中的字符个数!!

         2.  char  charAt(int index); 返回指定位置上的字符!!

         3.  String (char[] value);   用字符数组value创建一个String对象。

          4. String(char chars[] ,int x,int n);  用字符数组以x开始的n个字符创建一个String对象。

           5.boolean equals(String s)比较字符串与参数s是否相等。

    equals判断字符串的内容是否相等,==判断引用是否相等,是否为同一地址

        以String类的equals方法:

    public boolean equals(Object anObject) {

            if (this == anObject) {

                return true;

            }

            if (anObject instanceof String) {

                String anotherString = (String)anObject;

                int n = value.length;

                if (n == anotherString.value.length) {

                    char v1[] = value;

                    char v2[] = anotherString.value;

                    int i = 0;

                    while (n-- != 0) {

                        if (v1[i] != v2[i])

                            return false;

                        i++;

                    }

                    return true;

                }

            }

            return false;

        }

        遇到字符串比较的地方,都是使用equals方法,基本不会使用==。

            6. boolean startsWith(String s ) ;boolean endsWith(String s);判断字符串前缀是否为s

    求子串在长串中出现的次数:

    优化:发现子串开头后,截取字符串直接把子串长度的字符去掉!否则还是截掉首字母!

            7.int compareTo(String s);按字典排序与参数s指定的字符串比较大小如果当前字符串与s相同,返回0,如果当前字符串大于s返回正值,小于s返回负值

                compareTolgnoreCase(String s)方法忽略大小进行比较

            8.boolean contains(String s);判断当前字符串是否含有参数指定的字符串s。

           9. int indexOf(String s);返回字符串中首次出现参数s的索引位置,若没有检索到s则返回-1

    lastIndexOf(String s)返回最后出现s的索引位置

            10. String subString(int start);返回从字符串start位置截取到最后位置的字符串

                    subString (int start,int end);返回start到end位置(不包含end)的字符串。

    求子串在长串中出现的次数:

    优化:发现子串开头后,截取字符串直接把子串长度的字符去掉!否则还是截掉首字母!

            11.String trim();返回去掉字符串前后空格后的字符串

            12.String concat(String s);返回字符串与s连接后的字符串。

            13. String toLowerCase(Locale locale);转换为小写

            14.String toUpperCase(Locale locale); 转换为大写

            15.String replace(CharSequence target,CharSequence replacement);返回将字符串中所有target替换为replacement的字符串

            16. boolean matches(String regex);匹配正则表达式

             17.String replaceAll(String regex,String replacement);

                    根据正则表达式进行替换

             18.String[] split(String regex);根据正则表达式分割字符串。

        StringBuffer:可变的字符串缓冲区:

               内部保存数据的依然是一个字符数组!!

               只不过数组不是final修饰的,可以随时指向其它的字符数组!!

               在外界看来,就是这个StringBuffer对象可以发生变化。

                 一旦StringBuffer不想再发生变化了, 就可以使用toString方法,得到一个对应的String对象。

                   toString();转换成不可变的字符串;

                    特殊方法:

                      append(int x);在末尾添加内容

                       insert(int index,String str)在指定位置插入内容,

                       delete(int start,int end)删除指定范围的内容。

    String类与StringBuffer类的区别:

            String对象一旦发生变化,由于其内部的字符数组是final修饰的,所以是形成了一个新的对象!

            StringBuffer对象发生变化,其内部的字符数组就发生变化。

    StringBuilder类:

               jdk1.5出现的,非线程安全的,效率高。

                StringBuffer是线程安全的,效率低。

          线程安全:同一时刻是否只有一个线程访问资源!

    StringBuilder和StringBuffer的方法基本一致,区别只是是否安全而已。

    StringBuffer测试题:

    class StringBufferDemo{

    public static void main(String[] args) {

    StringBuffer s1 =new StringBuffer("A");

    StringBuffer s2 =new StringBuffer("B");

    test(s1,s2);

    System.out.println(s1 +"," + s2);

    }

    private static void test(StringBuffer x,StringBuffer y) {

    x.append(y);

    y=x;

    }

    在方法中,x表示的对象是一个内容可以改变的对象,所以,使用x调用它的方法会真正的改变s1和x指向的内存地址的内容发生变化。

    y是一个局部变量,这个引用变量本身的值发生的变化,不会影响到方法外。

    相关文章

      网友评论

          本文标题:Java常用类

          本文链接:https://www.haomeiwen.com/subject/alxisqtx.html