《Java 编程思想》学习笔记 12 | 字符串与正则表达式

1.String是不可变的

也就是之前提到的,它是final的;当需要改变字符串的内容时,String类的方法都会返回一个新的String对象;同时,如果内容没有改变,String的方法只是返回指向原对象的引用而已,节约了存储空间,避免了额外的开销。

2.StringBuilder比StringBuffer更高效

StringBuilder是JavaSE5引入的,StringBuffer是之前用的(线程安全的,因此开销也会大一些)。最常用的方法有append() toString() delete()

StringBuilder的作用是用来更高效的构造字符串对象。

3.JavaSE5后也拥有了C语言的格式化输出printf()

你可以在Java代码中写C语言的printf(),这没问题,甚至是格式修饰符%d、%f也完全可以使用;

Java中与printf()等价的方法是format()。如果你怀旧,你可以使用printf()

System.out.printf("I am %d", x);
System.out.format("I am %d", x);

4.正则表达式:它是一种在Java之上的新语言

4.1 基础

  1. 在普通的正则表达式式中,用 \d 表示一位数字;而在Java中,用 \\d 表示一位数字。
  2. -? 表示假如你要找一个数字,它可能有一个负号在最前面,或者什么符号也没有(?的作用)
  3. + 在正则表达式中有特殊含义,它表示有一个多或多个之前的表达式,通常放在正则表达式后面;如果要表示普通的+,应该用\\+
  4. -?\\d+ 表示可能有一个负号,或者什么符号也没有(?的作用),后面跟着一位或多位数字。
  5. | 表示或的意思;() 有着将表达式分组的效果。
  6. (-|\\+)?\\d+ 表示可能有一个负号或一个加号,或者什么符号也没有(?的作用),后面跟着一位或多位数字。

4.2 运用正则表达式最简单的途径就是利用String类已有的方法来作用于String对象上

  1. matches() 用正则表达式作为参数来给String做匹配:
public class Test {
    public static void main(String[] args) {
        System.out.println("-1234".matches("-?\\d+"));
        System.out.println("5678".matches("-?\\d+"));
        System.out.println("+5678".matches("-?\\d+"));
        System.out.println("+123".matches("(-|\\+)?\\d+"));
    }
}
/* Output:
* true
* true
* false
* true
*/
  1. split() 它表示将字符串从正则表达式匹配的地方切开,并且与正则表达式匹配的部分都被切没了!最后返回一个各个被切开的剩余部分的字符串数组。
  • " " 表示用空格作为正则表达式的匹配部分,匹配到空格就将字符串切开。
  • \\W 大写W在正则表达式中表示非单词字符(一个字母也可作为单词)。
  • \\w 小写w在正则表达式中表示一个单词字符。
  • \\W+ 表示用一个或多个非单词字符作为正则表达式的匹配部分。
  • m\\W+ 表示字母m开头(啥字母都行)后面跟着一个或多个非单词字符作为正则表打式的匹配部分。
  • 由于s.split()分隔后会返回一个字符串数组,直接输出的话会默认打印分隔后的字符串数组的地址;要想让数组真正输出到屏幕上,可以使用Arrays工具类的toString()方法将字符串数组转为String类并输出
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        String s = "I am WRJ ! ";
        System.out.println(Arrays.toString(s.split(" ")));
        System.out.println(Arrays.toString(s.split("\\W+")));
        System.out.println(Arrays.toString(s.split("m\\W+")));
        System.out.println(Arrays.toString(s.split("\\w+")));
    }
}
/* Output:
* [I, am, WRJ, !]
* [I, am, WRJ]
* [I a, WRJ ! ]
* [,  ,  ,  ! ]
*/
  1. replaceFirst() 将原字符串中第一个具有左参数也就是正则表达式部分的字符,,替换成右参数
  2. replaceAll() 将原字符串中所有具有左参数也就是正则表达式部分的字符串,替换成右参数。
public class Test {
    public static void main(String[] args) {
        String s = "I am WRJ ! ";
        System.out.println(s.replaceFirst("WRJ", "HLZX"));
        System.out.println(s.replaceFirst("I|am|WRJ", "HLZX"));
        System.out.println(s.replaceAll("I|am|WRJ", "HLZX"));
    }
}
/* Output:
* I am HLZX ! 
* HLZX am WRJ ! 
* HLZX HLZX HLZX ! 
*/

p297 13.6.2 之后的先不看

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值