• java字符串的替换replace、replaceAll、replaceFirst的区别详解


    如果不是刚刚复习了下正则表达式,我可能也不会注意到,原来String的replaceAll跟replaceFirst用到了正则表达式!

    不多解释,看代码:

    String s = "my.test.txt";
    System.out.println(s.replace(".", "#"));
    System.out.println(s.replaceAll(".", "#"));
    System.out.println(s.replaceFirst(".", "#"));

    运行结果:

    my#test#txt
    ###########
    #y.test.txt

    是不是感觉很神奇?

    其实懂正则表达式的应该已经发现了,是的,“.”是正则表达式的元字符,匹配除换行符以外的任意字符,所以replaceAll、replaceFirst才出现了这样的结果。

    而replace没有用到正则表达式,但会把所有“.”替换掉,很多人可能会误解replace是替换单个,而replaceAll是替换全部,其实这是错的(我以前也是这么想的- -)。replace只是没有用到正则表达式,但会替换所有匹配的字符串。

    到这里一些不懂正则表达式的小伙伴可能就要喊坑爹了,“那我不想用正则表达式去替换第一个字符串肿么办?”其实也很简单,只要将元字符串转义就行了。 

    s.replaceFirst("\.", "#")

    运行结果: 

    my#test.txt

    这里给个会被正则表达式识别的字符列表:

    .匹配除换行符以外的任意字符

    ^匹配字符串的开始

    $匹配字符串的结束

    *重复零次或更多次

    +重复一次或更多次

    ?重复零次或一次

    当然,正则可远不止这么点,个人建议花点时间去学习一下比较好~

    补充:String的split也是用到了正则表达式,使用的时候注意点哦!

  • 相关阅读:
    git 的常用命令(未完待补充)
    Mysql占用内存过高参数优化
    mysql安全基线设置
    redis安全基线设置
    centos7安全基线设置
    检查shell脚本
    redis安装和配置
    TIME_WAIT状态全是3306解决办法
    PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted 错误
    tcp的三次握手和四次挥手(二)
  • 原文地址:https://www.cnblogs.com/chen-lhx/p/10180500.html
Copyright © 2020-2023  润新知