String类

1.String类的重要性

在程序开发中,经常会用到字符串。字符串是指一连串的字符。它是由许多单个字符串连接而成,如多个英文字母所组成的一个英文单词。字符串可以包含任意字符,这些字符必须包含在一对双引号""之内。如:"aaddd"。

Java中定义了3个封装字符串的类,分别是String类、StringBuffer类、StringBuilder类,他们在java.lang包中,并且提供了一系列操作字符串的方法,这些方法不需要导包可以自己使用,在开发和校招笔试中,字符串也是常客。

2.String类的初始化

在使用String类进行字符串操作之前,首先需要对String类进行初始化。

2.1字符串构造

2..1.1使用常量串构造

 2.1.2直接newString对象

创建一个空字符串

 2.1.3创建一个内容为abcdff的字符串

 2.1.4使用字符数组进行构造

 注意:string是引用类型,内部并不存储字符串本身,在string类的实现源码中,String类实例变量如下

 我们先看以下代码

s1和s2引用的是不同对象,s1和s3引用的是同一对象,堆栈图如下:

 数组的引用,存的是数组的地址,byte[]类型的数组

String是一个全新的数据类型,String是一个类类型,是一个引用类型,Java当中没有字符串的结尾是\0这种说法。 

 3.String对象的比较

字符串是比较常见的操作之一,比如字符串排序,Java总共提供了四种方法

3.1 == 比较是否引用同一对象

注意:对于内置类型  == 比较的是变量中的值,对于引用类型==比较的是引用中的地址

 3.2boolean equals(Object anObject)方法:按字典序比较。

字典序:字符大小的顺序

String类重写了父类Object的equals方法,Object中equals默认按照==比较,String重写equlas方法后,按照以下规则进行比较:

比较的是里面的内容

 下面我们写代码来看看

s1、s2、s3的内容都是hello,我们发现s1和s2用==比较结果是false,因为==比较引用类型比较的是地址,s1和s2的地址是不同的,所以是false。s1和s3用==比较结果是true因为他们引用了是同一对象同一个地址。s2和s3用==比较结果是false,原因和s1和s2是一样的。

用equals比较,比较的是里面的内容所以都是true

 3.3 int compareTo(String s) 方法: 按照字典序进行比较

与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:
1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值

 3.4 int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较

 

 4.字符串的查找

String类提供的常见查找方法:

 下面我们一个一个来看看

4.1charA方法是根据下标进行查找

 这样子查找容易造成越界,我们改进一下

 4.2indexOf 查找对应字符或者字符串,注意这个从前往后找的

 4.3lastIndex查找对应字符或者字符串,注意这个从后往前找的

 5.数值和字符串的转化

 6.大小写转换

 7.字符串转数组

 8.格式化

 9.字符串的替换

 10.字符串的拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串

 注意返回类型是数组,需要用数组来进行接收

注意事项:
1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\" ,那么就得写成 "\\\\" .
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

例如:以下的演示

 

 

 

 11.字符串的截取

 注意:

1. 索引从0开始
2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

 12.去掉左右空格保留中间空格

注意看运行结果是不同的 

13.String的不可变性

String是一种不可变对象,字符串的内容是不可以改变的,字符串不能被修改

13.1String类在设计时就是不可改变的,String类内部实现描述中已经被说明

1. String类被final修饰,表明该类不能被继承
2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。 

所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

不能修改的原因 不是因为String类自身,或者其内部value被final修饰而不能被修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值