第七章:字符数列
1.字符串类型
1.1字符与字符串
字符类型(char)是Java中的基本数据类型之一,字符是用单引号引住的单个符号。
字符串(String)是用双引号引住的任意个字符,字符串其实就是字符组合成的序列。
文本块在jdk13测试,于jdk15后正式应用,用“‘ ”’
引用。一般开始时不直接编写内容,换行后开始编写,同样可以进行字符块的拼接。
tips:字符串+字符串表示拼接字符串
原始代码
运行结果
字符串就又不可变的特性,原因在于字符串内部存储内容的元素是final
修饰的所以不可变,而不是因为字符串的类是final
修饰的
isEmpty
:用于判断一个变量或对象是否为空,如果变量没有被赋予任何值,或者被赋予的值为空或null,则isempty
函数将返回真(true),否则返回假(false)。
isBlank
:主要用于判断一个字符串或文本是否为空或只包含空格字符。具体来说,如果字符串长度为0,或者字符串中只包含空格字符,isblank
函数将返回真(true),否则返回假(false)。
1.2字符串对象与字面量
字符串常用的常用声明形式:String 变量名 = "初始值";
String 变量名 = new String("初始变量");
第一种形式使用双引号引住的字符串叫做字面量,第二种形式使用new运算符声明的字符串叫做字符串的对象。
1.3字符串常用的API
返回类型 | 方法名称 | 作用 |
---|---|---|
boolean | equals(String) | 比较两个字符串是否相等 |
boolean | equalslgnoreCase(String) | 忽略大小写比较两个字符串是否相等 |
int | length() | 获取字符串的长度 |
char | charAt(int) | 获取字符串中的一个字符 |
int | indexOf(String) | 获取传入字符在原字符串中第一次出现的位置 |
int | lastIndexOf(String) | 获取传入字符串最后一次出现该字符串的位置 |
String | startsWith(String) | 判断传入字符串是否是以传入字符串开头的 |
String | endsWith(Sting) | 判断传入字符串是否是以传入字符串结尾的 |
int | compareTo(String) | 判断两个字符串的大小 |
String | toLowerCase() | 将字符串中的所有字符转化为小写 |
String | toUpperCase() | 将字符串中的所有字符转化为大写 |
String | substring(int) | 截取字符串,从传入参数位置开始截取到结尾 |
String | substring(int,int) | 截取字符串,从传入参数位置开始截取到指定位置 |
String | trim() | 去掉字符串中的 |
String[] | split(Sting) | 将原字符串按照传入的参数分割为字符串数组 |
String | replace(String,String) | 将字符串中指定的内容替换为另外的内容 |
1.4字符串的连接
字符串可以进行加法运算,作用是将两个字符串连接在一起,也可以将字符串与基本类型变量做加法运算,系统会先将基本类型转化为字符串类型后进行连接操作。
- tips :也可以用
concat()
方法进行连接
1.5字符串的比较
字符串也可以进行是否相等的比较,但是不能直接使用“==”运算符,而是要使用equals()方法进行比较。
1.6字符串的长度
String类的长度length() 方法可以获取字符串是由多少个字符构成的。
1.7字符串的查找
方法:
- String类的
indexOf()
方法用于在一个字符串中从前往后查找另外的一个字符串查找到了就返回另外一个字符串的下标,找不到就返回-1。 - String类的
lastIndex()
方法用于在一个字符串中从后向前查找另外一个字符串,如果找到了就返回另一个字符串的下标,找不到就返回-1. - String类的
startwith()
方法,用于判断一个字符串是否以另外一个字符串开头。 - String类的
toLowerCase()
方法,用于将字符串中所有字母变成小写字母。 - String类的
toUpperCase()
方法,用于将字符串中所有字母变成大写字母。 - String类的
split()
方法,用于将字符串以给定的分隔符分割成多个字符串,并将分割后的字符串保存到一个数组中,返回这个数组名。
1.8字符串内容替换
String类的 replace()
方法,用于将指定的内容替换成其他内容。
1.9字符串的截取
String类的 subString(int,int)
方法用于将字符串内容的截取,第一个参数是从第几位开始截取,第二个参数是截取到第几位。(如果没有第二个参数将默认从开始位置截取到结尾)
1.10字符串的格式化
String类的format()
方法用于常见格式化的字符串以及连接多个字符串对象。语法定义:format(String format,Object... args)
;第一个参数是被格式化的字符串,第二个参数是代替格式符的字符串,第二个参数中的…表示方法可变参数,即参数的个数根据个舒服的个数来确定。字符串格式化就是使用第二个可变参数中的值按照顺序替代第一个参数中的格式符。
格式符 | 说明 | 实例 |
---|---|---|
%s | 字符串类型 | “字符串” |
%c | 字符类型 | ‘字’ |
%b | 布尔类型 | true/false |
%d | 整数类型(十进制) | 100 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 99.99 |
2 字符串处理
2.1包装类介绍
包装类:由于基本数据类型与对象数据类型是两个不同的概念。为了使基本数据类型也具备面向对象的特性,Java提供了包装类。
八大基本类型包装类 |
---|
Boolean :用于封装布尔类型,可以表示true 或false 。 |
Byte :封装字节类型,表示范围为-128到127的整数。 |
Short :封装短整型,表示范围为-32,768到32,767的整数。 |
Integer :封装整型,表示范围为-231到231-1的整数。 |
Long :封装长整型,表示范围为-263到263-1的整数。 |
Float :封装单精度浮点数,用于表示带小数部分的数字。 |
Double :封装双精度浮点数,用于表示带小数部分的更大范围的数字。 |
Character :封装字符类型,用于表示单个字符。 |
tips:包装类中都存在两个常量一个是MAX_VALUE,另一个是MIN_VALUE表示最大值和最小值。
装箱和拆箱:
Java中的拆箱和装箱是指基本数据类型和对应的包装类之间的转换。Java中包装类提供了一些方法来完成拆箱和装箱的操作
装箱:将基本数据类型转换为对应的包装类对象,可以使用包装类的构造方法或静态方法valueOf()
来完成
拆箱:将包装类对象转换为对应的基本数据类型,可以使用包装类提供的xxxValue()
方法完成。
自动装箱和自动拆箱
当基本类型与它们的包装类有如下几种情况下,编译器会自动进行装箱和自动拆箱进行
编译器自动进行拆箱和装箱的情况 | |
---|---|
进行赋值操作(=) | 装箱封箱 |
进行混合运算(+ - * /) | 拆箱 |
进行比较运算(< > ==) | 拆箱 |
调用equals进行比较 | 装箱 |
ArrayList 或HashMap 等集合类添加基础类型数据 | 装箱 |
2.2String类型转化为基本类型
将字符串类型转化为基本数据类型,需要使用基本类型的包装类。
2.3基本数据类型转化为String类型
String类型的数据参与算术运算时,需要将String类型转化为基本数据类型,基本类型的数据在界面显示时需要将数据转换成String类型后再输出。
八种基本数据类型的数据转换成String类型方法 |
---|
通过“+”将基本类型与String类型连接,使其转换成String类型, |
通过String.valueOf(基本数据类型) 方法将基本数据类型转化为String |
2.4Math类
Math类是Java中的一个内置类,位于java.lang
包中。它提供了许多执行数学运算的静态方法和常量。
p155 图7-12
3字符串变量
3.1StringBuffer类
StringBuffer
类是Java中一个可变的字符串类,它提供了对字符串进行修改的方法。与String
类不同,StringBuffer
类的对象可以修改,添加,删除它们包含的字符串序列。
StringBuffer
类是线程安全的,因此它的所有方法都是同步的。
常见的Stringbuffer 类的构造方法 |
---|
StringBuffer() 创建一个StringBuffer 对象,初始容量为默认值(16个字符) |
StringBuffer(int capacity) 创建一个空的 Stringbuffer 对象,并指定初始容量。 |
StringBuffer(String str) 创建一个包含指定字符串的 StringBuffer 对象。 |
StringBuffer(charSquence seq) 创建一个包含指定字符序列的 StringBuffer 对象。 CharSequence 是一个接口,可以是String,StringBuffer或其他实现CharSequence接口类的实例 |
常见的 StringBuffer 方法 | |
---|---|
append() | 将一个字符串或者字符添加到 StringBuffer 的末尾。 |
insert(int,string) | 将一个字符串或者字符插入到 StringBuffer 的指定位置 |
delete() | 从 StringBuffer 删除指定位置的字符 |
reverse() | 将 StringBuffer 的字符序列翻转 |
length() | 返回 StringBuffer 的长度 |
toString() | 返回 StringBuffer 对象转回为普通的字符串 |
3.2StringBulider类
StringBulider
是Java中的一个类,它提供了一种可变的字符串缓冲区,可以动态的添加,修改,删除字符串内容。 StringBulider
类是可变的,这意味着它的长度和内容可以随着需要而变化,而不必去创建新的对象。
常用的 StringBulider 方法 | |
---|---|
append() | 将指定的字符串追加到此字符序列的末尾 |
insert() | 在此字符串序列中的指定位置插入指定的字符串 |
delete() | 删除此字符序列中指定范围内的字符 |
replace() | 用指定的字符串替换原来的字符序列中的特定字符 |
reverse() | 反转此字符序列中的字符顺序 |
总结:有关于StringBuffer
与StringBulider
的区别
StringBuffer
和StringBuilder
都是Java中用于处理字符串的类,它们之间的主要区别在于线程安全性和性能。StringBuffer
是线程安全的,被设计为多线程环境下使用。它的方法都被synchronized修饰,可以保证在并发环境下的数据一致性。然而,由于同步机制的存在,它的性能相对较低。StringBuilder
是非线程安全的,被设计为单线程环境下使用。它的方法没有被synchronized修饰,因此在并发环境下使用可能会导致数据不一致的问题。但是,由于没有同步机制的开销,它的性能相对较高。- 因此,如果在多线程环境下需要对字符串进行频繁的修改操作,建议使用
StringBuffer
,以确保数据的一致性;如果在单线程环境下进行字符串的操作,建议使用StringBuilder
,以获得更好的性能。 - 对于以上所说的线程安全为题,以及Synchronized关键字将在后面的章节中展现