1、String两种实例化方式
String str1 = "abc";//好,堆内存是共享的。一个字符串就是一个String类的匿名对象。匿名对象就是已经开辟了堆内存空间的并可以直接使用的对象。当实例化多个对象时共用同一个堆内存。
Sring str2 = new String("abc");//不好,堆内存不是共享的。当实例化多个对象时分配多个堆内存。这样会造成内存的浪费。
2、equals、==区别
==比较的是两个对象的地址是否相同;equals比较的是两个对象的内存中的内容是否
3、String方法
第一、获取
A、获取字符串中包含的字符数,也就是字符串的长度。
int length( )。
B、根据位置获取位置上某个字符。
char charAt(int index)。
C、根据字符获取该在字符串中第一次出现的位置。
int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。
int indexOf(int ch,int formIndex):从formIndex指定位置开始,获取ch在字符串中出现的位置。
int indexOf(String str):返回的是str在字符串中第一次出现的位置。
int indexOf(String str,int formIndex):从formIndex指定位置开始,获取str在字符串中出现的位置。
int lastIndexOf(int ch):从字符串后面往前找,返回的ch在字符串中首先出现的位置。
注意:如果获取方法获取不到,则返回-1。
第二、判断
A、字符串中是否包含某一个子串。
booleancontains(str);
特殊之处:indexOf(str)可以搜索str第一次出现的位置,如果返回-1,表示str不在字符串中存在。所以,indexOf(str)也可以用于判定是否包含。
B、字符串中是否有内容。
booleanisEmpty();
C、字符串是否以指定内容开头。
booleanstartsWith(str);
D、字符串是否是以指定内容结尾。
booleanendsWith(str);
E、判断字符串内容是否相同,覆写了Object中的equals方法。
booleanequals(str);
F、判断内容是否相同,并忽略大小写。
BooleanequalsIgnores(str);
第三、转换
A、将字符数组转换成字符串
构造函数:
String(char[])
String(char[],offset,count)将字符数组中一部分转成字符串
静态方法:
staticString copyValueOf(char[]);
staticString copyValueOf(char[] data,int offset,int count);
staticString valueOf(char[]);
B、将字符串转成字符组
char[] toCharAraay();对象时this,没有参数
C、将字节数组转成字符串
String(byte[]);
String(byte[],offset,count);
D、将字符串转成字节数据
byte[] getBytes();
E、将基本数据类型转成字符串
staticString valueOf(int);
staticString valueOf(double);
特殊:字符串和字节数组在转换过程中,时可以指定编码表的。
第四、替换
String replace(oldchar,newchar);
第五、切割
String[]aplit(regex);
第六、子串
获取字符串中的一部分
String substring(begin);从指定位置开始到结尾
Stringsubstring(begin,end);包含头,不包含结尾
第七、转换
将字符串转换成大写或者小写
String toUpperCase();
StringtoLowerCase();
第八、去除空格
Stringtrim();
第九、比较
intcompareTo(string);
booleanequalsIgnoreCase();
public classStringDemo01{
publicstatic void main(String[] args){
method_is();
method_get();
}
publicstatic void method_is(){
Stringstr = "ArrayDemo.java";
//判断文件名称是否以Array单词开头
sop(str.startsWith("Array"));
//判断文件名称是否是。java的文件
sop(str.endsWith(".java"));
//判断文件中是否包含Demo字符串
sop(str.contains("Demo1"));
}
publicstatic void method_get(){
Stringstr = "abcdeakpf";
//获取字符串长度
sop(str.length());
//根据索引获取字符,当访问下标越界时会报StringIndexOutOfBoundsException
sop(str.charAt(4));
//根据字符获取索引
sop(str.indexOf('m',3));
//反向索引一个字符出现位置
sop(str.lastIndexOf("a"));
}
publicstatic void sop(Object obj){
System.out.println(obj) ;
}
}
4、StrinBuffer
StringBuffer是字符串缓冲区,是一个容器,可以看成一个面盆和面,而且长度是可变化的。
C:create U:update R:read D:delete
第一、存储
StringBufferappend():将指定数据作为参数添加到已有数据结尾处。
StringBufferinsert(index,数据):可以将数据插入到指定index位置。
第二、删除
StringBufferdelete(start,end):删除缓冲区中数据,包含头,不包含尾。
StringBufferdeleteCharAt():删除指定位置数据
第三、获取
char charAt()
intindexOf()
Stringsubstring(int start,int end)
第四、修改
StringBufferreplace(start,end,string);
voidsetCharAt(int index,char ch);
第五、反转
StringBufferreverse();
5、StringBuilder
StringBuilder和StringBuffer类似,但是StringBuffer是线程安全的,但是效率低;而StringBuilder是线程不安全的,但是效率高,线程不安全可以用lock和unlock解决。
总结:
1、String九种方法,用来操作String字符串。
2、StringBuffer和StringBuilder的区别,线程安全和效率高低。