4.1常用对象API(String类)

来源:互联网 发布:windows ftp命令详解 编辑:程序博客网 时间:2024/05/16 13:43

1.特点

1. 字符串对象一旦被初始化就不会被改变2. 字符串缓冲区(常量池),新建字符串时先去常量池找,有就把地址返回,没有就创建。
例子:1.String s = "abc";  //存储在字符串常量池中String s1 = "abc";System.out.println(s == s1);   //true2.String s = "abc";  //在常量池中产生一个字符串对象,共享的String s1 = new String("abc");  //初始化"abc"字符串对象。新创建的字符串是"abc"的副本。s1特有                    //就是在堆内存里面产生两个对象,一个new,一个字符串对象。System.out.println(s == s1);    //flaseSystem.out.println(s.equals(s1));  //String类是Object的子类,它复写了equals()方法,这里比较的不是地址了,是内容。                                        //其实就是比较字符串内容,true

2.构造函数

例子:1.String s = new String();  //等效与String s = "";  不等效String s = null;byte[] arr = {65,66,67,68};String s1 = new String(arr);  //将字节数组变成字符串,ABCD2.char[] arr = {'C','z','q','G','s'};String s = new String(arr,0,3);  //将字符数组指定部分变成字符串,这里从0开始,取3个,即Czq

3.方法:

按照面对对象的思想对字符串进行功能分类"abcd"1.获取:    1.1. 获取字符串中字符的个数。                            int length();    1.2根据位置获取字符。                            char charAt(int index);    1.3根据字符/字符串 获取在字符串中第一次出现的位置。不存在返回-1                            int  indexOf(int ch);      从0开始                            int indexOf(int ch, int fromIndex);从指定位置进行ch的查找,第一次出现的位置                            int indeOf(String str);                            int indeOf(String str, int fromIndex);                            int lastIndexOf(int ch);       从最后一个开始                            int lastIndexOf(int ch, int fromIndex);                            int lastIndeOf(String str);                            int lastIndeOf(String str, int fromIndex);    1.4获取字符串中的一部分字符串。也叫子串。                            String  substring(int beginIndex, int endIndex)   包含begin,不包含end                            String  substring(int beginIndex)2.转换:    2.1将字符串变成字符串数组(字符串的切割):涉及到正则表达式                            String[]  split(String regex)    regex - 定界正则表达式                            String[]  split(String regex, int limit) limit 切割成几段    2.2将字符串转换成字符数组。反过来用字符串构造函数。                                            或者使用静态方法:String copyValueOf(char[] data)                                                          String copyValueOf(char[] data,int offset, int count)                             String[]  toCharArray();    2.3将字符串变成字节数组                            byte[]  getByte();  一个汉字两个字节,是负的    2.4将字符串中的字母转换成大小写                            String  toUpperCase() : 大写                            String  toLowerCase():  小写    2.5将字符串中的内容进行替换                            String replace(char oldChar, char newChar);    如果没有找到旧字符,就不新建字符串,直接在常量池中调用原字符串对象                            String replace(CharSequence target, CharSequence replacement);   字符串替换,String类是CharSequence接口的子类。(它所有的子类都可以替换)    2.6将字符串两端的空格去掉,返回字符串的副本                            String trim();    2.7将字符串进行连接                            String   concat(String str)  如果str长度为0,则不创建新字符串,直接在常量池中调用原字符串对象                            和 + 等效,但是上面的更专业。    2.8将基本数据类型将换成字符串,静态方法                                String valueOf(boolean b)                                String valueOf(char c)                                String valueOf(char[] data)                                String valueOf(char[] data,int offset,int count)                                String valueOf(double d)                                String valueOf(float f)                                String valueOf(int i)                                String valueOf(long l)                                String valueOf(Object obj)3判断:    3.1两个字符串内容是否相同                            boolean equals(Object obj) 区分大小写                            boolean equalsIgnoreCase(String str) 忽略大小写    3.2字符串中是否包含指定字符串                            boolean contains(String str)    3.3字符串是否以指定字符串开头/结尾                            boolean startsWith(String);                            boolean endsWith(String);4.比较:按字典顺序比较。等于,返回0。小于,返回一个负数。大于返回一个正数                            int compareTo(String anotherString)         

4.intern方法:操作字符串池,如果字符串池中包含此字符串,则返回池中的字符串。如果池中没有,在则在池中新建一个并返回新的字符串对象。开发基本不用

String s1 = new String("abc");   //"abc"是在对象中被操作,池中没有String s2 = s1.intern();     //相当于将新的"abc"存到池里System.out.println(s1==s2);   //falseString s1 = "abc";    在池中新建String s2 = s1.intern();System.out.println(s1==s2);   //true

5.StringBuffer:就是字符串缓存区。(内部就相当于数组,默认16个字符)
用于存储数据的容器。
特点:

 1.长度可变 2.可以存储不同类型数据 3.最终要转成字符串进行使用。toString() 4.对字符串可以修改 

具备的功能: 增删改查 C(create增)U(update改)R(read查)D(delete删)

 1.添加:        StringBuffer   append(data);     追加到尾部        StringBuffer      insert(int offset, data);   插入到指定位置2.删除:        StringBuffer delete(int start, int end);  包含头,不包含尾        StringBuffer deleteCharAt(int index);  删除指定位置的元素        delete(0,sb.length());   清空 3.修改:        StringBuffer replace(start,end,string); 替换    void              setChatAt(index, char);  替换一个字符 4.查找:        char charAt(index);        int indexOf(String);        int lastIndexOf(String); 5.其他:        设置长度: void setLength(int );                  sb.setLength(0);   清空(了解)        反转:      StringBuffer reverse

注意:

可变长度数组:  容量不够就新建一个数组,把原来的元素复制过来,然后添加新的元素。容量是原来的一倍不等。            能确定容器容量时最好在初始化时就确定,效率高些。
  1. StringBuilder: jdk1.5以后出现了和StringBuffer一模一样的对象。
不同的是:StringBuffer是线程同步的。如果是单线程每次运行都要判断锁,效率低。安全,通常用于多线程。StringBuilder是线程不同步的。是补充的单个线程的等价类,单线程时优先使用StringBuilder,由于不执行同步,所以速度更快。

原理:

class StringBuffer {        Object lock;        public StringBuffer append(int x)        {            synchronized(lock)            {}        }           public StringBuffer delete(int start, int end)        {            synchronized(lock)            {}        } }
原创粉丝点击