一、String对象是不可变的
每次修改String,实际上在java对象堆都会创建一个新的对象、
二、StringBuffer和StringBuilder
StringBuffer :效率低,线程安全的(同步)
StringBuilder:效率高,线程不安全(不同步)
三、 正则表达式
3-1、作用:
字符串匹配,查找,替换
3-2、基础知识
符号 | 含义 |
---|---|
. | 匹配一个字符 |
* | 匹配0-N个字符 |
+ | 匹配1-N个字符 |
? | 匹配 0或者1个字符 |
^ | 位于[]内表示取反,位于[]外,表示一行的开头 |
- | 表示范围例如 0-9, |
| | 表示“或” |
&& | 表示“与” |
\d | 表示数值[0-9] |
\D | 表示非数值[^0-9] |
\s | 表示空白符(空格,回车,tab,换行,换页),[\t\n\x0B\f\r] |
\S | 表示非空白符 |
\w | 表示词字符(大小写字母,下斜杠,数字),[a-zA-Z_0-9] |
\W | 表示非词字符 |
\b | 词的边界 |
\B | 非词边界 |
\G | 前一个匹配的结束 |
3-3 Pattern和Matcher的概念
都在java.util.regex包下
3-3-1.Pattern类
静态方法:compoile() 用于创建正则表达式
pattern():用于返回正则表达式
split():用于分隔字符串,返回一个字符串数组
静态方法matcher :用于快速匹配字符串,该方法只能匹配一次。且匹配全部字符串
Pattern p=Pattern.compile("\W");//创建正则表达式
System.out.println(p.pattern());//输出该正则表达式
for(String s:p.split("你好啊123,你好")){// split() 用于分隔字符串,返回一个字符串数组
System.out.println(s);
}
//静态方法 matches(正则表达式,字符串)
Pattern.matches("\\d", "1234");//true
Pattern.matches("\\b+", "12aa")//false
3-3-2、Matcher类
Pattern中的matcher方法用于创建Matcher类的对象
Matcher常用方法:
1.matches(): 对整个字符串进行匹配,只有整个字符串都匹配了才返回true
2. lookingAt(): 从第一个字符开始匹配,若匹配成功,停止匹配返回true。若匹配失败,停止匹配,返回false
3. find():部分匹配,匹配到的字符串可以是任意位置
4. start()返回匹配到的子字符串在字符串中的索引位置.
5. end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
6. group()返回匹配到的子字符串
7. start(int i),end(int i),group(int i)专用于分组操作.
8. Mathcer类还有一个groupCount()用于返回有多少组.
Pattern p=Pattern.compile("\\b+");//创建Pattern对象
Matcher m= p.matcher("123aa");//创建Matcher对象
m.pattern() //获得创建Matcher对象的Pattern对象
m.matches() //匹配整个字符串,返回false
m.lookingAt() //匹配到123,返回true
m.find() //返回true
System.out.println(m.start()); //输出0;匹配子串的开始索引
System.out.println(m.end());//输出3 ; 匹配子串的结束索引
System.out.println(m.group());//输出123 ; 匹配子串
m.find(3)//从字符串下标为3处,开始匹配
/////////////////////////////////////////////////////////////////////////////////
//分组操作
Pattern p=Pattern.compile("([a-z]+)(\\d+)");
Matcher m=p.matcher("aaa2223bb");
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串
3-4 捕获组的概念
捕获组:可以通过从左到右计算器开括号的编号,编号从1开始;
例如:A(B(C))D
编号0 为 ABCD
编号1为BC
编号2 为C