JAVA-基础-常用API(StringBuffer类,正则表达式)

时间:2023-02-18 20:57:05

  字符串缓冲区

 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, "*");