1 StringBuilder类型
- 概述:用来表示字符串的类型
- 特点:
(1)是一个可变的字符序列
类型底层也是通过一个字符数组来维护的数据,维护的数组没有private修饰,而且类中提供了一些公共修改数组值的方法。
(2)在lang包不需要导包
1.1 StringBuilder构造方法
函数名 | 解释 |
---|---|
StringBuilder() | 创建一个初始值为空的字符串对象,数组的初始大小为 16 |
StringBuilder(int c) | 创建一个初始值为空的字符串对象,数组的初始大小是c |
StringBuilder(String str) | 创建一个初始值为str的字符串对象,数组初始大小为str.len+16 |
1.2 StringBuilder获取长度的方法
概述:StringBuilder对象中维护的是一个字符数组,所以可以获取字符数组的长度和元素的个数。
函数名 | 解释 |
---|---|
capacity() | 返回对象的初始容量 |
length() | 返回字符串对象长度 |
1.3 StringBuilder类型中常用的方法
1、增加方法:
函数名 | 解释 |
---|---|
append(int i) | 在字符串基础上追加数据,可以加任何类型的数据 |
insert(int offset, char c) | 在指定索引添加数据 |
如果对象中维护的数组容量不够存储,就自动扩容数组
扩容方式:原有的长度*2 + 2
添加的索引范围:0----length
2、删除方法:
函数名 | 解释 |
---|---|
delete(int start, int end) | 删除从start开始到end-1结束的字符 |
deleteCharAt(int index) | 删除指定索引位置上的字符 |
3、替换方法:
函数名 | 解释 |
---|---|
replace(int start, int end, String str) | 将指定索引范围的字符换成新的字符串 |
4、反转方法:
函数名 | 解释 |
---|---|
reverse() | 将字符串在本身的基础进行反转 |
代码
public class Demo02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("abcd");
//在原有的字符串基础上,追加数组
sb.append(100);
System.out.println(sb);
//在指定的索引上添加元素
sb.insert(0,"xyz");
System.out.println(sb);
//索引越界异常
// sb.insert(14,"qqq");
// System.out.println(sb);
//删除指定范围内的字符:包含头索引不包含尾索引
sb.delete(3,7);
System.out.println(sb);
//删除指定索引上的字符
sb.deleteCharAt(0);
System.out.println(sb);
//替换指定范围内的内容为新内容
sb.replace(2,5,"abc");
System.out.println(sb);
//将字符串进行反转
sb.reverse();
System.out.println(sb);
}
}
1.4 String类型和StringBuilder类型拼接字符串的效率
- 结论:
使用String类型拼接字符串效率低
使用Stringbuilder类型拼接字符串效率高 - 说明:
使用String类型拼接字符串,本身是不能直接修改数据,系统默认创建一个可变的字符序列,拼接两个字符串再将可变的字符序列转为String对象。所以这样做,既浪费空间也浪费时间。
使用Stringbuilder类型拼接字符串,直接在原有的基础上追加或者删除或者修改数据, 节约时间,节约空间。
1.5 String类型和StringBuilder类型的区别
- 相同点:
(1)两个类型都是可以定义字符串
(2)两个类型对象中都是通过字符数组来维护数据 - 不同点:
(1) String类型是不可变的字符序列类型
StringBuilder是可变的字符序列类型
(2) String类型定义的方式有两种(可以接收常量,也可以接收一个堆内存中的对象)
StringBuilder类型只有一种定义方式(new创建对象)
(3) String类型拼接效率低
StringBuilder类型拼接效率高
1.6 StringBuffer和StringBuilder区别【笔试题可能会出】
- 两个类型的相同点:
(1)两个类型都是可变的字符序列
(2)两个类型中的方法都大致相同
(3)构造方法也都相同 - 不同点:
(1)StringBuilder是线程不安全
StringBuffer是线程安全的
(2)StringBuilder是jdk1.5版本后才有
StringBuffer是jdk1.0就有
(3)StringBuilder使用效率高
StringBuffer使用效率低
1.7 Integer类型中常用的方法
非静态方法:
函数名 | 解释 |
---|---|
intvalue() | 将包装类型的对象转为int类型 |
doublevalue() | 将包装类型的对象转为double类型 |
静态方法:
函数名 | 解释 |
---|---|
parseInt(String s) | 将字符串s转为基本数据类型int |
parseInt(String s, int radix) | 将字符串s当做radix进制转为十进制int |
toBinaryString(int i) | 将十进制的i变量,转为二进制的字符串 |
toHexString(int i) | 将十进制的i变量,转为十六进制的字符串 |
toOctalString(int i) | 将十进制的i变量,转为八进制的字符串 |
toString(int i, int radix) | 将十进制的i变量,转为指定进制的字符串 |
valueOf(int i) | 将基本数据类型i转为包装类型对象 |
ValueOf(String str) | 将字符串str转为包装类型对象 |
1.8 自动装箱和自动拆箱【jdk1.5版本及之后版本支持】
-
装箱:将基本数据类型包装为引用数据类型的对象
-
拆箱:将引用数据类型的对象转为基本数据类型
-
自动装箱:直接使用引用数据类型的变量,接收基本数据类型的元素
-
自动拆箱:直接使用基本数据类型的变量,接收引用数据类型的对象
直接使用引用数据类型的对象进行数据的运算
2 正则表达式
- 概念:正则表达式是对字符串操作的一种逻辑公式,使用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
- 总结:
(1)正则表达式就是一个字符串
(2)这个字符串不仅可以用来匹配和自己一模一样的内容,还可以作为模板匹配其他字符串
(3)别名:规则表达式
2.1 正则表达式中的字符类
- 字符:使用引起来的单个符号 char
- 字符类:
(1)使用[]
表示某一个单个符号
(2)不管[]
中定义多少个字符,都只能表示其中一个字符[abc]:a或者b或者c abc其中一个
[0-9]:0至9之间的其中一个
[a-z]:a-z之间的其中一个
[a-zA-Z$_]:括号中定义的字符只要是其中一个就满足
[^a-z]:除了a-z字符其中一个
使用方式:要判断一个字符串是否满足某个正则表达式,需要使用matches方法
2.2 正则表达式中的预定义字符
- 预定义字符:用来表示一些常用字符的特殊符号
- 罗列:
. :表示所有的单个字符
\d :所有的数字字符 [0-9]
\D :所有的非数字字符 [^0-9]
\s :所有的空格字符
\S:所有的非空格字符
\w:表示0-9a-zA-Z_
\W:除了\w的其中一个字符
- 注意:
以上预定义字符,都只能表示其中一个符号
2.3 数量词
- 字符类和预定义字符类都只能表示单个符号,如果需要表示多个符号,需要通过数量词 来修饰。
- 分类:
模糊的数量词
精确的数量词 - 模糊的数量词
X?:x这个字符可以出现0次或者1次
X+:x这个字符出现1次或者多次
X*:x这个字符可以出现0次1次或者多次
- 精确的数量词
X{n}:表示x这个字符正好出现n次
X{n,}:表示x这个字符至少出现n次
X{n,m}:表示x这个字符出现n-m次
2.4 正则相关的三个方法
函数 | 说明 |
---|---|
matches(String regex) | 判断调用者字符串是否和定义的正则字符串匹配 |
split(String s) | 切割调用者字符串,只要调用者字符串中满足s这个规则都可以进行切割;返回值是一个字符串数组,将切割后的内容存入到字符串数组中 |
replaceAll(String s1,String s) | 将满足s1的字符串全部替换成s字符串 |