《Thinkinginjava》第13章-字符串

字符串操作是计算机程序设计中最常见的行为

13.1 String的不可变性

String对象是不可变的。String类中那些看起来会修改String的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串的内容。而最初的String对象根本没有改变。

public class Immutable {
    public static String upcase(String s){
        return s.toUpperCase();
    }

    public static void main(String[] args) {
        String d = "hello";
        System.out.println(d);
        String b = upcase(d);
        System.out.println(b);
        System.out.println(d);
    }
}

在以上代码中,把s传递给方法upcase()时,实际传递的是引用的一个拷贝。其实,每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指向的对象其实一直待在单一的物理位置上从未动过。

实际上,当upcase()方法结束时,局部变量s就消失了,upcase()返回的引用已经指向了一个新对象,而原本的d则还在原地。

13.2 正则表达式

正则表达式中,括号有将表达式分组的效果,而竖直线|则表示或操作:

(-|\\+)?表示字符串的起始字符可能是一个-或一个+,或者二者都没有,因为后面跟着修饰符,因为+在正则表达式中有着特殊的意义,所以必须使用\\将它转义,使它成为表达式中的一个普通字符。

13.2.1 量词

量词描述了一个模式吸收输入文本的方式:

  • 贪婪型:量词总是贪婪的,除非有其他的选项被设置。贪婪表达式会为所有可能的模式发现尽可能多的匹配。
  • 勉强型:用问号来指定,这个量词匹配满足模式所需的最少字符数。因此也称作懒惰的、最少匹配的、非贪婪的或不贪婪的。
  • 这种模式只在java中使用,用于防止正则表达式失控,因此可以使正则表达式执行起来更有效。
贪婪型勉强型占有型如何匹配
X?X??X?+一个或0个X
X*X*?X*+0个或多个X
X+X+?X++一个或多个X
X{n}X{n}?X{n}+恰好n次X
X{n,}X{n,}?X{n,}+至少n次X
X{n,m}X{n,m}?X{n,m}+X至少n次,且不超过m次

表达式X通常要用括号括起来,使得正则表达式能按我们的期望去执行。如abc+(abc)+的执行效果是不一样的。

正则中的组(group)使用括号划分的正则表达式,可以根据组的编号来引用某个组,组号为0表示整个表达式,组号1表示被第一对括号括起来的组,以此类推,如在表达式:A(B(C))D中有三个组:组0是ABCD,组1是BC,组2是C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值