前言:String类是表示字符串的类,String类的内部也提供了非常多的方法来供程序员使用。
String类还有一大特性,就是不可变性。只要使用string创建了字符串,就不可以修改。为string类提供了一层安全性。(对于" "引起来的也为String类型对象)
字符串不可变性
String是一种不可变的对象,字符串中的内容不可被修改。如图:
由图可知道,String类的字符由value数组所进行维护,无法修改。所有涉及到可能修改字符串内容的都是创立一个新的对象,改变的是新对象,原有的字符串无法改变,如我们使用replace方法:
可以看到,这个替换只是创建了新的对象,并没有真正的改变。如果真要改变字符串,可以直接这样:
可以看见,直接修改确实可以看到改变了,但实际上String类是不可修改的,所有的修改都会创立新的对象,这样修改的效率非常低下(用此方法的修改会在中间创建许多临时变量,占用内存和时间)要想字符串可变,可以使用StringBuffer和StringBuilder(下面会讲)
字符串常用功能方法
1.字符串构造
有着三种方法进行构造,原理是String的形参为字符数组(s1为s2的简化形式):
s1,s2,s3为引用变量,存于栈区,字符串存于堆区:
2.String对象比较
(1)==比较
对于内置类型,==比较的是值,对于引用类型,==比较的是地址
(2)equals比较
对于String类,它自己也重写了equals方法,也有特定的比较形式:
总结上图,字符串比较方式是先检测anObject是否为String类型的对象,然后再检测字符串长度是否相同,然后再一个接着一个字符的检测。
(3)compareTo方法
1.int compareTo(String s):
该方法按照字典序进行比较,(不忽略大小写),先按照次序一个个进行比较,发现不对等的字符返回ascll码差值;如果前面所有字符都相等,但是其中一个字符串比另外一个要长,则返回这俩个字符串长度差值。
2.int compareTolgnoreCase(String str):
与compareTo不同的是,它忽略大小写的比较:
3.字符串查找(charAt、indexOf、lastIndexOf)
如图:
以上的位置均为下标,除了第一个返回字符,其他都是返回int类型
演示:
4.类型转化
注意:只要涉及到String类型的转换,都不是在原有的字符串改变,而是创建一个新的字符串来改变。
(1)数字转化字符串(valueOf)
格式:String.valueOf(...)
可以看到,它支持这么多的类型转化为字符串。
需要注意的是,该方法是使用String类来引用的,所以它是一个静态方法
(2)字符串转化数字(Integer.parseInt、Double.parseDouble)
格式:需要用到包装类来引用
(3)大小写转换(toUpperCase、toLowerCase)
1.小写转大写:String toUpperCsae()
2.大写转小写:String toLowerCase()
(4)字符串转化数组(toCharArray)
格式:char[] toCharArray()
(5)数组转化字符串(new)
直接new一个String类型对象即可。
5.字符串替换
(1)replace:替换所有指定字符
格式:String replace(char oldchar, char newchar)
(2)replace:替换所有指定字符串
格式:String replace(String oldchar, String newchar)
(3)replaceAll:替换所有指定字符串(支持正则表达式)
格式:String replaceAll(String regex, String replacement)
(4)replaceFirst:替换首个指定字符串(支持正则表达式)
格式:String replaceAll(String regex, String replaceFirst)
6.字符串拆分
(1)split:字符串全部拆分
格式:String[] split(String regex)
(2)split:字符串以指定的形式拆分成指定组
格式:String[] split(String regex,int limit)
注意事项:
1.拆分字符为" | " " * " " + " '' . ''时都得加上转义字符,前面加上" \\ "
2.如果是" \\ ",前面就加上'' \\\ ''
3.如果一个字符串要用多个分割符,则可以用" | "为连字符
示例1:
示例2(多次拆分):
7.字符串截取
(1)substring:从指定位置截取到结尾
格式:String substring(int beginlndex)
(2)substring:截取[beginlndex,endlndex)以内的内容(部分)
格式:String substring (int beginlndex,int endlndex)
8.字符串去空格(trim)
格式:String trim()
去掉的是前后的空格
9.字符串的length方法
区别于数组的length,字符串的length后面要加括号:(如:s.length())
StringBuilder和Stringbuffer类
对于String类的不可变性,java又多提供了俩种类来解决这个问题,方便字符串进行修改。StringBuilder和StringBuffer这俩大类,他们大部分功能是相同的,都有一个append方法来修改着字符串。所以以后写代码时用的字符串需要修改时,用这俩大类来定义字符串。
区别性
StringBuffer比StringBuilder多了一个transient关键字,在多线程情况下,Buffer能够保证线程的安全,但是一般单线程情况下,只用StringBuilder即可。
重要功能
append方法:
用于拼接字符串和字符,还可以追加各种类型的变量,如图:
格式:StringBuff append(String str)
还会有许多StringBuilder和Stringbuffer类的各种方法,这里就不介绍了。
制作不易,麻烦给个赞鼓励一下!