20.字符串处理工具类

String

常用方法

在这里插入图片描述

length()

返回此字符串的长度。

String str = "Java 编程 基础";
System.out.println(str.length());	// 10

charAt()

返回 char指定索引处的值。

String str = "Java 编程 基础";
System.out.println(str.charAt(1));	// a

indexOf()

返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。

String str = new String("JAVA编程基础,我喜欢Java编程");
// 查找A第一次出现位置
System.out.println(str.indexOf("A"));	// 1
// “编程”第一次出现位置
System.out.println(str.indexOf("编程"));	// 4
// 从index值为8开始,查找第一次“编程”出现的位置
System.out.println(str.indexOf("编程", 8));	// 16

lastIndexOf()

返回指定字符的最后一次出现的字符串中的索引,从指定的索引开始向后搜索。

String str = new String("JAVA编程基础,我喜欢Java编程");
// 查找A最后一次出现位置
System.out.println(str.lastIndexOf("A"));	// 3
// “编程”最后一次出现位置
System.out.println(str.lastIndexOf("编程"));	// 16

getBytes()

使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。

		// 字符串转换为byte数组
		String str = new String("JAVA编程基础,我喜欢Java编程");
		byte arrs [] = str.getBytes();
		for(byte b : arrs) {
			System.out.println(b + ",");
		}
		// byte数组转换为字符串
		String str1 = new String(arrs);

同时编码格式的设置:

		String str = new String("JAVA编程基础,我喜欢Java编程");
		// gbk编码
		byte arrs [] = str.getBytes("gbk");
		for(byte b : arrs) {
			System.out.println(b + ",");
		}
		// gbk编码
		String str1 = new String(arrs, "gbk");
		System.out.println(str1);

equals()

将此字符串与指定对象进行比较。

String中equals()和 == 的区别
  • String类型比较中equals()用于比较不同对象内容是否相同
  • ==用于比较基本数据类型的是否相同以及判断引用是否指向堆内存的同一块地址
		String str1 = "jachie";
		String str2 = "jachie";
		String str3 = new String("jachie");
		System.out.println(str1.equals(str2));	// true
		System.out.println(str1.equals(str3));	// true
		System.out.println(str3.equals(str4));	// true
		
		System.out.println(str1 == str2);	// true
		System.out.println(str1 == str3);	// false
		System.out.println(str3 == str4);	// false

在这里插入图片描述

str1会指向常量池里的"jachie"str2创建的时候,同时也是指向"jachie",因此两个对象不仅值相同,同时他们的地址引用也相同;创建str3对象的时候,会指向堆里的实例对象,同时str4创建的时候,也会在堆里创建一个引用对象,并指向它。
因此str3str4的值是相同的,但是引用地址是不相同的。

String的不可变性

String对象一旦被创建,则不能被修改,是不可变的,所谓的修改其实就是创建了新的对象,所指向的内存空间不变。

		String s1 = "hello,";
		s1 = s1 + "jachie";

在这里插入图片描述

原本s1指向“hello,”,而后,指向“hello,jachie”,取消指向原来的“hello,”

		String s1 = "hello,";
		String s2 = "hello,jachie";
		String s3 = s1 + "jachie";
		System.out.println(s2);	// hello,jachie
		System.out.println(s3);	// hello,jachie
		System.out.println(s2 == s3);	// false

在这里插入图片描述

s2指向常量池里的“hello,jachie,而s3执行s1 + "jachie";则是在堆里创建了一个对象,因此两者引用地址不同。

StringBuilder

String和StringBuilder的区别

String具有不可变性,而StringBuilder不具备。
因此当频繁操作字符串时,使用StringBuilder,避免产生一些中间变量和在常量池当中废弃的数据。

StringBuffer 和 StringBuilder

  • 二者基本相似,继承了一个抽象的字符串父类:AbstractStringBuilder
  • StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 StringBuilder 修饰。因此StringBuilder性能更高一点,而且大多字符串处理都是单线程情况。

StringBuilder可变示例:

		StringBuilder str = new StringBuilder("hello");	// 1.
		str.append(",");	// 2.
		str.append("jachie");	// 3.
		System.out.println(str);	// 4. hello,jachie

执行1.:StringBuilder str = new StringBuilder(“hello”);
在这里插入图片描述
执行2.:str.append(",");
在这里插入图片描述
执行3.:str.append(“jachie”);
在这里插入图片描述

自始至终,str都没有创建新的对象,而是一直在原来的基础上进行变化。

常用方法

append(String str)

将指定的字符串附加到此字符序列。

delete(int start, int end)

删除此序列的子字符串中的字符。从start开始删除,到end之前结束。

insert(int offset, String str)

将字符串插入到此字符序列中。从offset之前开始插入。

replace(int start, int end, String str)

用指定的String中的字符替换此序列的子字符串中的String 。从start开始,到end之前结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空 白

停止的只会是自己,你得追逐世界

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值