java基础-第九章 字符串

java基础

待补



前言

在Java中,字符串(String)是一种非常重要的数据类型,用于表示文本数据。字符串是字符的序列,可以包含0个或多个字符,并且这些字符可以是字母、数字、空格、标点符号等。


1.String类

1.1声明字符串

字符串必须使用**“”**包裹
声明的字符串变量必须设置初始值,基础类型会有默认初始值,但字符串对象不会,所以必须手动赋予初始值。
在这里插入图片描述

1.2创建字符串

1.2.1使用构造器创建

传入字符数组或者字符串为参数

char a[]={'a','b','c'}  
Satring s=new String(a)  
  
//或者  
  
String s =new String("abc")

1.2.2直接使用""创建

String str1,str2;  
str1="abc";  
str2="abc";

1.2.3区别

使用构造器创建的字符串对象和其他引用对象一样,会在堆内存中分别开辟一个区域进行存储,即使字符串的内容一致,也会在内存中开辟不同的两个对象。
使用**""创建的对象,会把对象创建在堆内存中一个叫"串池"的地方,并且,在创建前会先检查串池中是否存在同内容的字符串对象**,如果存在就复用
在这里插入图片描述

2.连接字符串

2.1多字符串连接

使用**+**可以连接多个字符串

2.2连接其他数据类型

使用+把字符串和其他数据类型连接,则会直接把其他数据类型转换为字符串

3.获取字符串信息

3.1获取字符串长度

使用String类提供的length()方法可以获取到字符串的长度

3.2字符串查找

indexOf(String str)

这个方法返回第一次出现的指定子字符串在此字符串中的索引

如果没有找到子字符串,则返回 -1。

lastIndexOf(String str)

返回在此字符串中的最右边出现指定子字符串的索引

如果没有找到子字符串,则返回 -1。

indexOf(String str, int fromIndex)

与 indexOf(String str) 类似,但是从 fromIndex 开始搜索

如果没有找到子字符串,则返回 -1。

lastIndexOf(String str, int fromIndex)

与 lastIndexOf(String str) 类似,但是从 fromIndex 或之前的位置开始向左搜索。

如果没有找到子字符串,则返回 -1。

contains(String str)

检查此字符串是否包含指定的子字符串

如果包含则返回 true,否则返回 false

String a="avaeasg";  
System.out.println(a.indexOf("ae"));  
System.out.println(a.contains("lk"));

4.字符串操作

4.1获取子字符串

使用String类提供的substring()方法可以并传入int型参数可以从指定索引截取子串。可以只传起始索引,也可以同时额外传入结束索引,结果包含起始索引字符,不包含结束索引字符。

String a="avaeasg";  
System.out.println(a.substring(2,4));

4.2字符串替换

String类提供的replace()方法可以把指定字符串替换为新字符串

String a="avaeasg";  
System.out.println(a.replace("ae","替换"));

4.3判断字符串开始与结尾

使用startwith(),endwith()方法

String a="avaeasg";  
System.out.println(a.startsWith("av"));  
System.out.println(a.endsWith("sg"));

4.4判断字符串相等

使用equals()方法比较字符串内容是否相等(使用==比较引用类型时,比较的是两对象的地址值)。
使用
equlsignoreCase()方法在忽略大小写
的情况下比较字符串内容是否相等

4.5字符串大小写转换

使用toLowerCase()方法把所有大写字母改为小写字母
使用toUpperCase()方法把所有小写字母改为大写字母
4.6字符串分割
使用split()方法分割字符串,(即以传入的字符串为分隔符,来对原字符串进行划分)

5.字符串格式化

5.1日期和时间格式化

在要使用日期和时间并需要将其转换为字符串时,通常会需要将其转换为某些格式的字符串比如2024-7-17(具体格式看个人需求)。这种让日期对象转换为特定格式的字符串的过程就是格式化。这里不赘述,在需要时可以向AI取证。

5.2常规类型格式化

其他类型的值也可以转换格式,比如将某个整数换为十六进制表示。

6.正则表达式

正则表达式可以检查字符串是否满足某些要求,具体语法不赘述,使用Sring类中的**matches(“正则表达式”)**方法来判断某字符是否满足对应正则表达式。

String a="acvasw";  
System.out.println(a.matches("(\\p{Lower})*"));//任意数量的小写字母

7.字符串生成器StringBuilder

7.1介绍

普通的字符串一旦创建其内容无法更改,即使使用+进行添加,也是在内存中创建了一个新对象来存储新值。这样会消耗更多内存,于是后来的jdk提供StringBuilder来解决这个问题。
StringBuilder 类允许你在运行时动态地修改字符串数据。由于 String 类是不可变的,这意味着一旦创建了一个 String 对象,你就不能更改它的内容。但是,StringBuilder 提供了可变的字符串缓冲区,使得添加、删除和修改字符串内容变得简单。

7.2常用操作

以下是如何使用 StringBuilder 来修改字符串的几个常见操作:

创建 StringBuilder 实例: 你可以通过构造函数使用现有的字符串来初始化 StringBuilder。

追加内容: 使用 append() 方法可以将任何类型的数据追加到现有字符串的末尾。

插入内容: 使用 insert() 方法可以在指定位置插入内容。

替换内容: 使用 replace() 方法可以在指定范围内替换字符串。

删除内容: 使用 delete() 或 deleteCharAt() 方法可以删除字符串中的部分或全部内容。

修改单个字符: 使用 setCharAt() 方法可以修改字符串中特定位置的字符。

反转字符串: 使用 reverse() 方法可以反转字符串中的字符顺序。

获取最终结果: 使用 toString() 方法可以将 StringBuilder 的内容转换回不可变的 String。

8.字符串底层

字符串底层是一个数组.
在jdk1.9以前是一个char[],jdk1.9之后是一个byte[]。
当底层是byte类型的数组,字符串对象会先调用字符串本身的getBytes()方法获取到对应的字节数组后再进行存入。

8.1不同的对象创建方式

一个字符串对象可以直接使用**"“创建,也可以使用String()构造器**创建。
区别:使用”"创建的字符串对象存在于字符串常量池(串池)中,使用构造器创建的对象存在于堆中。
补充:串池是一片 用来存储字符串常量的内存区域。在jdk1.8前它存在于方法区中,jdk1.8之后随着元空间搬到本地内存中,串池也就被放到堆中。

8.2字符串拼接原理

仅字符串常量拼接:使用字符串优化机制,在编译时已经是拼接完的结果。
字符串变量与字符串常量拼接:jdk1.8前和jdk1.8后的原理不同,这里分开讲。
jdk1.8前
每次使用一个字符串变量和字符串常量拼接,都会在堆中新建一个StringBuilder对像,StringBuilder对象从串池中取出要拼接的字符串进行拼接,最后StringBuilder对象调用toString方法来在堆中创建一个新的String对象存放拼接完的字符串。
jdk1.8之后:
在拼接前先估计最终拼接结果的长度,然后再创建一个数组来进行拼接操作,最终返回拼接完的字符串。

8.3StringBuilder底层

底层也是一个数组,这里jdk17(查看时的版本),中该数组是一个byte类型的数组。


总结

本文章简单介绍一下字符串的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值