正则表达式的作用:约束字符串的格式
字符集:
[] :方括号表示其中的内容任选其一,代表一个字符
[1234] 1,2,3,4任选其一
() :表示一组内容,圆括号中可以使用"|"符号
| :逻辑或关系
^ :非,除了
[^12] 除了1或2的其他字符
- :范围,范围应从小到大
[0-9]表示此字符只能是数字
[a-f]表示此字符只能是a,b,c,d,e,f之一
[0-6a-fA-F] 0123456abcdefABCDEF
{n,m} :修饰前一个字符,表示其出现n-m次.n应小于m
{n} :修饰前一个字符,表示其出现n次
{n,} :修饰前一个字符,表示其出现n次以上
0[xX][0-9a-fA-F]{1,8}
0x7fffffff int最大值
预定义字符集:
\d :表示一个数字.与[0-9]意思一致
. :表示任意字符
\w :表示单词字符.[0-9a-zA-Z_] 包含个下划线
\s :表示空白: \t \n \r \b \p
\D :表示非数字
\W :非单词字符
\S :非空白
? :修饰前一个字符出现0-1次. {0,1}
+ :修饰前一个字符出现1次以上.{1,}
* :修饰前一个字符出现任意次. {0,}
注意:"."在正则表达式中代表任意字符,若想表示"."的原意,我们
需要使用"\."表示
网页url格式:
[w]{3}\.[0-9a-zA-Z]+\.com
通过上面的正则表达式,是否能描述
wwww.sohu.com
可以的.原因在于,正则表示式搜索整个字符串,判断部分内容满足
格式就可以.
为了解决让正则表达式全字符匹配.我们需要告诉正则表达式需要
从字符串的开始到结尾^ $
^[w]{3}\.[0-9a-zA-Z]+\.com$
常用的正则表达式:
邮编 : ^[0-9][0-9][0-9][0-9][0-9][0-9]$
邮编只有6位数字
^[0-9]{6}$
^\d{6}$
用户名: 单词字符出现8-10次
^\w{8,10}$
^[0-9a-zA-Z_]{8,10}$
手机号码: +86 15811111111
0086 15811111111
15811111111
^(\+86|0086)?\s?\d{11}$
身份证号: 15位或18位
18位最后一位有可能是x(大小写均可)
^\d{15}(\d{2}[0-9xX])?$
一个坐标: 18 , 789
18 789
^\d+(\s*,\s*|\s+)\d+$
正确答案: ABCD A,B A B C A , B
^A?(\s*|\s*,\s*)?B?(\s*|\s*,\s*)?C?(\s*|\s*,\s*)?D?$
日期格式: 2012-08-17
^\d{4}-\d{2}-\d{2}$
^\d{4}(-\d{2}){2}$
2012-99-99
email : ^\w+@\w+(\.(com|cn|net))+$
=======================================================
String中对正则表达式的支持
String的API中有几个方法支持正则表达式
matches() 匹配正则表达式
slipt() 根据正则表达式拆分字符串
replaceAll() 将满足正则表达式的部分已给定字符串替换
缓冲字符串StringBuffer和StringBuilder
String:char[] + 操作 char[]为不变对象
优点:使用起来更自然,贴近基本类型
缺点:字符串拼接时资源消耗大!处理速度慢(要创建很多对象)
在进行大规模频繁修改字符串时,String的缺点明显!
这时应使用缓冲字符串
StringBuffer:char[] + 操作 char[]可变
缓冲字符串中的char[]数组使用一种变长算法自动扩容当前
char[]长度.以满足其中字符串数据的拼接与修改.
StringBuffer的API:
insert() :向当前字符串中指定索引处插入字符串
append() :在当前字符串末尾追加字符串
delete() :删除字符串中的部分内容
toString() :将当前缓冲字符串转换为String
StringBuilder:和StringBuffer几乎一样,区别在于
StringBuilder:线程非安全
StringBuffer :线程安全
String的拼接优化:
String s = s1 + s2;
java实际运行时优化为
String s = new StringBuilder(s1).append(s2).toString();