String类详解

前言: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类的各种方法,这里就不介绍了。

制作不易,麻烦给个赞鼓励一下!

相关推荐
k09334 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
激流丶10 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
神奇夜光杯11 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue14 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧15 分钟前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
测试界的酸菜鱼27 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
让学习成为一种生活方式30 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画36 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
Black_Friend44 分钟前
关于在VS中使用Qt不同版本报错的问题
开发语言·qt
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法