java基础-正则表达式

一、String类
String使用非常频繁,用来描述一个字符串.String中实现了很多
对字符串方便的操作方法.
String内部使用char[]实现字符串的数据保存

字符串的”字面量(直接量)”也是String类型的实例

String对象是不变对象.对象创建后内容不可更改,这样的规则使
得String看起来更像简单类型.

String中的每个字符都是有索引值的,第一个字符的索引值为0,
依次类推

String API
charAt() :返回指定索引处的char值
length() :返回字符串长度
trim() :返回去掉字符串两边的空白(不是空格)
的字符串
toLowerCase() :将字符串中的英文全小写
toUpperCase() :将字符串中的英文全大写
indexOf() :返回给定字符在当前字符串中第一次出
现的索引值
lastIndexOf() :返回给定字符在当前字符串中最后一次
出现的索引值
endsWith() :判断当前字符串是否以给定字符串结尾
startsWith() :判断当前字符串是否以给定字符串开始
substring() :截取字符串
toCharArray() :将字符串转换为字符数组

静态字符串
java在编译期间(javac)凡是遇到”字面量”与常量间的运算,都会
先运算出结果,在进行编译工作
例如:
源代码中:
String name = “abc” + “def”;
编译期间:
String name = “abcdef”;

运行期间当字符串池中有String”字面量”时,java会直接引用,若
没有才会创建对象

String a = “abc”;
此时,字面量”abc”在String池中不存在,那么java创建一个
String对象保存”abc”,并放入String池中.

String b = “abc”;
当执行到这句话时,”abc”在String池中已经存在,那么java
会让b直接引用之前创建的字符串对象”abc”,而不重复创建
对象.尽可能优化字符串对象的重用(因为字符串是不变对象
所以重用不会带来问题)

因为这个特性,所以a==b为true是存在的.

二、正则表达式:
正则表达式的作用:约束字符串的格式

字符集:
[] :方括号表示其中的内容任选其一,代表一个字符
[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.[09azAZ]+.com

    常用的正则表达式:

    邮编 : ^[0-9][0-9][0-9][0-9][0-9][0-9] 6[09]6
    ^\d{6}$

    用户名: 单词字符出现8-10次
    ^\w{8,10} [09azAZ]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} \d4(\d2)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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值