今天学习了Java中的String类,学习内容如下:
1.String类创建对象的两种方法:
(1)静态创建:String s1 = "abc";
(2)动态创建:String s2 = new String("abc");
区别在于静态创建时只会在方法区的常量池中创建一个对象并由引用直接指向该对象,动态创建则是创建两个对象,一个在堆中,一个在常量池中,引用指向堆的对象,堆的对象指向常量池的对象。注:String创建后即不可修改,String也不可被继承;
2.常见初始化方法:
(1)new String();
(2)new String(char[]);
(3)new String(char[],起始下标位置,长度);
(4)new String(byte[]);
(5)new String(byte[],起始下标位置,长度);
3.字符串连接操作符:
(1)可用+连接字符串:String s1 = "abc"+"def" //s1指向abcdef
String s2 = 10+"def"+20 //s2指向的是10def20
String s3 = 10+20+"def" //s3指向的是30def
即数字与字符串相加会变为字符串,String s1 = "abc"+"def"的过程是先在常量池中开辟abc的空间,再开辟def的空间,再开辟abcdef的空间,String不能被修改是指的是在初始化时常量池中的对象的值。
(2)String s1 = "abc"
String s2 = "def"
String s3 = s1+s2;
String s4 = "abcdeg"
String s5 = "abc"+"def"
这里面如果用==判断的话,s4与s5是相等的,而s3与s4不相等,原因如下:s3是对象相连也就是先开辟出一个新的空间再给初始化为abcdef,而s5则是先在常量池中查找有没有abcdef的常量对象,如果有则直接指向该对象;
4.常用方法:
length():返回有效长度;
equals():判断是否相等;
equalsIgnoreCase():判断是否相等并且忽略大小写;
indexOf/lastIndexOf(char):查找元素第一次/最后一次出现的下标;
indexOf/lastIndexOf(String):查找字符串首次/最后一次出现的下标;
indexOf/lastIndexOf(int):查找对应asc码元素出现第一次/最后一次的下标;
indexOf/lastIndexOf(char int/String int/int int):从指定位置开始查找对应元素第一次/最后一次出现的位置;
charAt(下标):用来返回字符串下标位置的单个字符;
toLowerCase/toUpperCase:转化为全大写/全小写;
subString(int):从指定位置截取字符串,直到结尾;
subString(int,int):从指定位置截取字符串,到指定位置结束,不会将结尾的位置包含进去;
trim():去除字符串前后的空格;
concat(String):与+作用一样,用于连接字符串,但是只能传入字符串类型,且传入的字符串对象不能为null;
getBytes():获得对应的byte数组;
toCharArray():获得对应的char数组;
contains(String):判断是否含有字符串元素,返回boolean类型的值;
startsWith(String):字符串是否以给定值开始;
endsWith(String):字符串是否以给定值结束;
startsWith(String,int):判断字符串在指定位置,是否以指定值开始;
replace(old char,new char):将字符串中所有指定的旧值改为新值;
replace(old charsequence,new charSequence):将所有指定字符序列改为新的字符序列;
replaceAll(String,String):安正则表达式选取被替换的元素,替换为后面的元素;
split(String):按照正则表达式将字符串分为字符串数组;
matches(String):判断字符串是否满足正则表达式,返回布尔类型的值;
Pattern.matches(Sting,String):判断后面的字符串满不满足前面的正则表达式;
contentEquals(charSequence/StringBuffer):可以直接比较内容是否相等;
5.正则表达式:
6.StringBuffer
可以高效的操作字符串,由StringBuffer创建的字符串是可以被修改的,而且在实现操作时没有多余的内存开销
常见方法:
append(String/charSequence):类似于String的+可以添加字符串;
capacity():返回StringBuffer的容量;
length():返回有效值长度;
setCharAt(下标,char):更改指定位置的字符;
reverse():反转字符串;
delete(起始位置,结束位置):删除起始下标至结束下标前一个的字符串;
toString():转为字符串类型;
replace(起始位置,结束位置,要替换为的字符串):将起始下标至结束下标前一个的字符串替换为指定字符串;
7.StringBuilder
提供了和StringBuffer相同的API,区别在于StringBuffer中的方法有synchronized修饰是线程安全的而StringBuilder没有。优点是:如果单线程操作的话Stringbuilder效率高于StringBuffer。
8.String,StringBuffer,StringBuilder区别:
9.String与StringBuffer:常量与变量的区别,String是由final修饰的不能产生子类,String使用final修饰的byte数组来存储值,一旦被创建则不能被改变。如果经常对数据进行修改,如添加,删除,分割等使用StringBuffer更优;