字符串缓冲区
StringBuffer类
查阅StringBuffer的API,StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
StringBuffer底层是依赖了一个字符数组才能存储字符数据的,该字符数组默认的初始容量是16,
如果字符数组的长度不够使用,自动增长1倍+2.
StringBuffer:这个类用来创建可变字符串对象,它允许字符串在创建之后对其进行插入,删除,修改等操作。而且StringBuffer类是字符串缓冲区类,他的每一个对象都有初始容量,默认是16个字符长度。只要它当中的字符长度不超过它的容量,就不需要再分配新的内部缓冲容量,否则将自动增大。
特点:
1:可以对字符串内容进行修改。
2:是一个容器。
3:是可变长度的。
4:缓冲区中可以存储任意类型的数据。
5:最终需要变成字符串。
StringBuffer的方法使用
append(String str) 将指定的字符串追加到此字符序列
delete(int start ,int end) 移出此序列的子字符串中的的字符
insert(int offset , String str) 将字符串插入此字符序列中
replace(int start , int end ,String str) 使用给定String 中的字符替换此序列子字符串中的字符
reverse () 将此字符序列用反转形式取代
toString() 返回此序列中数据的字符串表示形式
创建一个字符串缓冲区对象。用于存储数据。 StringBuffer sb = new StringBuffer(); sb.append("haha"); //添加字符串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//删除
sb.replace(1, 4, "cast");//替换指定范围内的内容
String str = sb.toString();
// 注意:append、delete、insert、replace、reverse方法调用后,
//返回值都是当前对象自己,所以说,StringBuffer它可以改变字符序列的长度和内容。
对象的方法链式调用
在我们开发中,会遇到调用一个方法后,返回一个对象的情况。然后使用返回的对象继续调用方法。这种时候,我们就可以把代码写在一起,如append方法一样,代码如下:
创建一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer();
添加数据。不断的添加数据后,要对缓冲区的最后的数据进行操作,必须转成字符串才可以。
String str = sb.append(true).append("hehe").toString();
l 无论多少数据,数据是什么类型都不重要,只要最终变成字符串就可以使用StringBuffer这个容器
StringBuilder类
StringBuilder类比StringBuffer类要快,但不安全
正--则--表--达--式
正则表达式 是一个字符串,使用单个字符来描述、用来定义匹配规则匹配一系列符合某个句法规则的字符串
开发中 通常用来 检索 替换那些符合某个规则的文本
匹配规则:
明确区分大小写
字符:x
表示字符x
字符:\\
表示 "\"
字符: \t
制表符
字符:\n
换行符
字符:\r
回车符
字符类:[abc]
表示匹配a或b或c
字符类:[^abc]
表示匹配除了a或b或c之外的任意字符
字符类:[a-zA-Z]
代表的是a 到 z 或 A 到 Z,两头的字母包括在内
字符类:[0-9]
代表0到9的数字 包括两头数字
字符类:[a-zA-Z_0-9]
代表需要匹配字母或下划线或数字
预定义字符类: " . "
匹配规则为" . ",那么需要匹配的是一个任意字符。如果,就想使用 . 的话,使用匹配规则"\\."来实现
预定义字符类:\d
含义:代表的是 0到9数字,两头的数字包括在内,相当于[0-9]
预定义字符类:\w
代表匹配 字母或数字或下划线
边界匹配器:^
含义:代表的是行的开头
例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容从[abc]这个位置开始, 相当于左双引号
边界匹配器:$
含义:代表的是行的结尾
例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容以[0-9]这个结束, 相当于右双引号
边界匹配器:\b
含义:代表的是单词边界
例如:匹配规则为"\b[abc]\b" ,那么代表的是字母a或b或c的左右两边需要的是非单词字符([a-zA-Z_0-9])
数量词:X?
含义:代表的是X出现一次或一次也没有
例如:匹配规则为"a?",那么需要匹配的内容是一个字符a,或者一个a都没有
数量词:X*
含义:代表的是X出现零次或多次
例如:匹配规则为"a*" ,那么需要匹配的内容是多个字符a,或者一个a都没有
数量词:X+
含义:代表的是X出现一次或多次
例如:匹配规则为"a+",那么需要匹配的内容是多个字符a,或者一个a
数量词:X{n}
含义:代表的是X出现恰好 n 次
例如:匹配规则为"a{5}",那么需要匹配的内容是5个字符a
数量词:X{n,}
含义:代表的是X出现至少 n 次
例如:匹配规则为"a{5, }",那么需要匹配的内容是最少有5个字符a
数量词:X{n,m}
含义:代表的是X出现至少 n 次,但是不超过 m 次
例如:匹配规则为"a{5,8}",那么需要匹配的内容是有5个字符a 到 8个字符a之间
练习:
匹配规则:
匹配正整数:”\\d+”
匹配正小数:”\\d+\\.\\d+”
匹配负整数:”-\\d+”
匹配负小数:”-\\d+\\.\\d+”
匹配保留两位小数的正数:”\\d+\\.\\d{2}”
匹配保留1-3位小数的正数:”\\d+\\.\\d{1,3}”
l 匹配合法的邮箱:
”[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+”
”\\w+@\\w+(\\.\\w+)+”
字符串类中涉及正则表达式的常用方法
boolean matches (String regex) 告知此字符串是否匹配给定的正则表达式 boolean
String[] split (String regex) 根据给定的正则表达式 拆分此字符串
String replaceALL(String regex ,Stringreplacement) 使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串
l public boolean matches(String regex) //判断字符串是否匹配给定的规则
举例:校验qq号码.
1: 要求必须是5-15位数字
2: 0不能开头
代码演示:
String qq = "604154942";
String regex = "[1-9][0-9]{4,14}";
boolean flag2 = qq.matches(regex);
举例:校验手机号码
1:要求为11位数字
2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
代码演示:
String phone = "18800022116";
String regex = "1[34578][0-9]{9}";
boolean flag = phone.matches(regex);
l public String[] split(String regex) //根据给定正则表达式的匹配规则,拆分此字符串
举例:分割出字符串中的的数字
代码演示:
String s = "18-22-40-65";
String regex = "-";
String[] result = s.split(regex);
代码演示:
String s = "18 22 40 65";
String regex = " ";
String[] result = s.split(regex);
l public String replaceAll(String regex,String replacement) //将符合规则的字符串内容,全部替换为新字符串
举例:把文字中的数字替换成*
代码演示:
String s = "Hello12345World6789012";
String regex = "[0-9]";
String result = s.replaceAll(regex, "*");