zoukankan      html  css  js  c++  java
  • java字符串的替换replace、replaceAll、replaceFirst的区别详解

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

    不多解释,看代码:

    1
    2
    3
    4
    String s = "my.test.txt";
    System.out.println(s.replace(".""#"));
    System.out.println(s.replaceAll(".""#"));
    System.out.println(s.replaceFirst(".""#"));

    运行结果:

    1
    2
    3
    my#test#txt
    ###########
    #y.test.txt

    是不是感觉很神奇?

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

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

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

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

    运行结果: 

    1
    my#test.txt

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

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

    ^匹配字符串的开始

    $匹配字符串的结束

    *重复零次或更多次

    +重复一次或更多次

    ?重复零次或一次

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

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

  • 相关阅读:
    序列化流与反序列化流
    io流之Properties类
    io流之转换流与缓冲流
    Io流之File概述(递归/字节流/字符流)
    基本数据类型包装/System类/Math类/Arrays类
    Date类概述与Calendar类概念
    String类型概述
    20180926 小小插件 (弹窗)
    20180901 文件加载 错误处理 错误的触发
    20180828 优化留言板 功能(增加 删除 修改 查看)!
  • 原文地址:https://www.cnblogs.com/jun9207/p/5191857.html
Copyright © 2011-2022 走看看