一.StringBuilder类
1.为什么用StringBuilder?
由于String是不变对象,每次修改内容都要创建新对象,因此String不适合做频繁修改操作.为 了解决这个问题,java提供了StringBuilder类.
2.优点:内部会自动扩容,修改速度和性能开销优异,降低频繁修改字符串带来的性能损耗
3.StringBuilder是专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个 数组上进行的,
4.修改字符串的常见操作对应的方法:
StringBuilder b = new StringBuilder()//创建对象
//增--append()
b.append("我爱java");//删--delete()删除部分内容
b.delete(0,2);//删除下标0到2之间
//改replace()替换部分内容
b.replace(0,2,"例子");//替换下标0-2之间的内容
//插入insert()插入操作
b.insert(0,"例子");//在下标0处插入内容
//翻转字符串reverse()
b.reverese();
通过调用toString方法将StringBuilder内容以字符串形式返回.
System.out.println(b.toString());
5.StringBuffer 和StringBuilder的区别
– StringBuffer是线程安全的,同步处理的,性能稍慢
–StringBuilder是非线程安全的,并发处理的,性能稍快
二.正则表达式
正则表达式是用来描述一个字符串的内容格式,使用它通常用来匹配一个字符串的内容是否符合格式要求
1.基本语法
[]:表示一个字符,该字符可以是[]中指定的内容
[abc]:这个字符可以是a或b或c
[a-z]:表示任意一个小写字母
[a-zA-Z]:表示任意一个字母
[a-zA-Z0-9_]:表示任意一个数字字母下划线
[^abc]: 该字符只要不是a或b或c
预定义字符
. 表示任意一个字符,没有范围限制
\d:表示任意一个数字,等同于[0-9]
\w:表示任意一个单词字符,等同于[a-zA-Z0-9_]
\s:表示任意一个空白字符.
\D:表示不是数字
\W:不是单词字符
\S:不是空白字符
量词
-
?:表示前面的内容出现0-1次
例如:
[abc]? 可以匹配:a 或 b 或 c 或什么也不写
-
+:表示前面的内容出现1次以上
[abc]+ 可以匹配:aaaaaaaaaa...或abcabcbabcbabcbabcbabbabab....
但是不能匹配:什么都不写或abcfdfsbbaqbb34bbwer...
-
*:表示前面的内容出现任意次(0-多次)
匹配内容与+一致,只是可以一次都不写.
-
{n}:表示前面的内容出现n次
例如:
[abc]{3} 可以匹配:aaa 或 bbb 或 aab
不能匹配:aaaa或aad
-
{n,m}:表示前面的内容出现最少n次最多m次
[abc]{3,5} 可以匹配:aaa 或 abcab 或者 abcc
不能匹配:aaaaaa 或 aabbd
-
{n,}:表示前面的内容出现n次以上(含n次)
[abc]{3,} 可以匹配:aaa 或 aaaaa.... 或 abcbabbcbabcbabcba....
不能匹配:aa 或 abbdaw...
-
()用于分组,是将括号内的内容看做是一个整体
例如:
(abc){3} 表示abc整体出现3次. 可以匹配abcabcabc.
不能匹配aaa 或abcabc
(abc|def){3}表示abc或def整体出现3次.
可以匹配: abcabcabc 或 defdefdef 或 abcdefabc
2. String支持正则表达式的相关方法
1.matches方法
String mail = "abc@baidu.cn";
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";boolean match = mail.matches(regex);//检验邮箱
使用给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true.否则返回false
2. split方法
String[] split(String regex)
将当前字符串按照满足正则表达式的部分进行拆分,将拆分后的每部分以数组形式返回.
案例
String str = "abc123def456ghi"; //按照数字部分拆分,获取其中每部分字母 String[] arr = str.split("[0-9]+"); System.out.println(Arrays.toString(arr));//[abc, def, ghi] str = "123,456,789,023"; //拆分出所有的数字部分 arr = str.split(","); System.out.println(Arrays.toString(arr));//[123, 456, 789, 023] //如果连续遇到拆分项,则会拆分出一个空字符串.但是在字符串末尾连续遇到则忽略. str = ",,,123,,,456,789,023,,,,"; //拆分出所有的数字部分 arr = str.split(","); System.out.println(Arrays.toString(arr));//[, , , 123, , , 456, 789, 023] str = "123.456.789.023"; //拆分出所有的数字部分 arr = str.split("\\.");//.在正则表达式中表示任意字符,要注意转义! System.out.println(Arrays.toString(arr));//[123, 456, 789, 023]
注意:1)如果连续遇到拆分项,则会拆分出一个空字符串.但是在字符串末尾连续遇到则忽略.
2) . 在正则表达式中表示任意字符,要注意转义
3.replaceAll方法
String replaceAll(String regex,String str)
将当前字符串中满足正则表达式的部分替换为给定内容
String str = "abc123def456ghi";
//将当前字符串中的数字部分替换为NUMBER
str = str.replaceAll("[0-9]+","NUMBER");
三.Object类
Object是所有类的顶级超类,其中有两个经常被子类重写的方法:
toString()与equals().
四.包装类
java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的形式存在.
-
其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object
-
Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型.
基本类型 包装类
* byte Byte
* short Short
* int Integer
* long Long
* float Float
* double Double
* char Character
* boolean Boolean
1.基本类型转化为包装类
java推荐我们使用包装类的静态方法valueOf()将基本类型转换为包装类,而不是直接new
int i = 123;
Integer i1 = Integer.valueOf(i);
Integer i2 = Integer.valueOf(i);
System.out.println(i1==i2);//true
System.out.println(i1.equals(i2));//true
Double则是直接new
double d = 123.123;
Double d1 = Double.valueOf(d);
Double d2 = Double.valueOf(d);
System.out.println(d1==d2);//false
System.out.println(d1.equals(d2));//true
2.包装类转换为基本类型
int in = i1.intValue();
double doub = i1.doubleValue();
System.out.println(in);//123
System.out.println(doub);//123.0in = d1.intValue(); //大类型转小类型可能存在丢精度!
doub = d1.doubleValue();
System.out.println(in);//123
System.out.println(doub);//123.123
3.包装类常用功能
1)可以通过包装类获取其表示的基本类型的取值范围
int imax = Integer.MAX_VALUE; int imin = Integer.MIN_VALUE;
long lmax = Long.MAX_VALUE; long lmin = Long.MIN_VALUE;
2)字符串转换为基本类型
parseInt() parseDouble()
前提是该字符串正确描述了基本类型可以保存的值,否则会抛出常:NumberFormatException
String str = "123";
//String str = "123.123";//这个字符串不能解析为int值!
int d = Integer.parseInt(str);
System.out.println(d);//123
double dou = Double.parseDouble(str);
System.out.println(dou);//123.123