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

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

相关推荐
mubeibeinv几秒前
项目搭建+图片(添加+图片)
java·服务器·前端
青莳吖2 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
Buleall9 分钟前
期末考学C
java·开发语言
重生之绝世牛码11 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行17 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm157627 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明36 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
新手小袁_J42 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅42 分钟前
C#关键字volatile
java·redis·c#
Monly2143 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat