编程思想_字符串

本文介绍了Java中String类的相关知识。String底层由char[]实现,不可变,“+”连接字符串由编译器引入StringBuilder类实现。编写toString()方法时,简单操作可信赖编译器,循环中最好手动创建StringBuilder。还提到避免在toString()中直接用this,以及Formatter类、String.format()方法和正则表达式的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.String底层是由char[]实现的,是不可变的。看起来会改变String的方法,实际上都是创建了一个新的String对象,任何指向它的引用都不可能改变它本身的值。

2.通过 “+” 连接String字符串,实际上是编译器自动引入了StringBuilder类,通过append()方法实现的。

3.当为一个类编写toString()方法时,如果字符串操作比较简单,可以直接使用“+”,信赖编译器。 但是如果在方法中使用了循环时,最好自己创建一个StringBuilder对象,用它来手动构造最后的结果。 如果使用“+”,编译器会在循环的过程中不断的创建StringBuilder对象,影响效率的同时也会造成过多垃圾。虽然java存在自动回收机制,但是其从来不是实时的,只是在内存不够用时才回收,所以尽量产生少的垃圾也是必要的。

4.在toString()方法中,不要直接使用this,如使用 a = “b” + this + “c”这种语句,编译器无法识别this的时候,会调用this的toString()方法,此时就会陷入递归中。

5.Formatter()类能实现String字符串输出格式更精细的控制,当需要时可以参考使用此类。

6.String.format()方法,其实现原理也是内部创建Formatter对象,实现格式化。

7.熟练掌握正则表达式的书写规范,同时熟悉使用Pattern和Matcher类api,两者结合的功能很强大,几乎可以满足对字符串的操作。

 // 1.构建Pattern对象
    Pattern pattern = Pattern.compile("1[0-9]{10}");
    // 2.构建Matcher对象
    Matcher matcher = pattern.matcher("18888888888");
    // 3.使用Matcher方法
    System.out.println(matcher.matches());
  // 整个字符串是否满足表达式
    matcher.matches();
    // 判断字符串中是否包含表达式
    matcher.lookingAt();
    // 遍历字符串
    matcher.find();
    matcher.find(int start);
    // 返回前一次匹配的结果
    matcher.group();
    matcher.groupCount();
    // 返回前一次匹配操作中寻找到的组的起始索引
    matcher.start();
    // 返回前一次匹配操作中寻找到的组的最后一个字符加一的值
    matcher.end();
    // 替换所有
    matcher.replaceAll();
    // 替换第一个
    matcher.replaceFirst();
    // 渐进式的替换
    matcher.appendReplacement();
    // 将现在Matcher用于一个新的字符串
    matcher.reset();

[参考文章]https://www.jianshu.com/p/a82c982afe33

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值