• JAVA中的replace、replaceAll、replaceFirst方法的区别和使用


    今天在做题过程中遇到了replace()方法,顺便做笔记总结一下replace三种方法的使用方法和他们之间的区别。
    01 replace方法定义: replace(char oldChar, char newChar) 用newChar字符替代oldChar字符,返回一个新的字符串
    02 replaceAll方法定义: replaceAll(String regex, String replacement) , 使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。, replaceAll和replaceFirst要求第一个参数regex是正则表达式,replacement是字符串
    03 replaceFirst方法定义: replaceFirst(String regex, String replacement),基本和replaceAll相同,区别是只替换第一个匹配项
    举例:

    String src = new String("ab43a2c43d");    
     
    System.out.println(src.replace("3","f"));   //ab4f2c4fd.  
       
    System.out.println(src.replace('3','f'));  //ab4f2c4fd. 
        
    System.out.println(src.replaceAll("\\d","f"));  //abffafcffd.数字型全部替换为f 
    
    System.out.println(src.replaceAll("a","f"));  //fb43fc23d.  
      
    System.out.println(src.replaceFirst("\\d,"f")); //abf32c43d第一个数字型替换为f  
    
    System.out.println(src.replaceFirst("4","h"));  //abh32c43d.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    思考: 如何将字符串中的"“替换成”\"

    String s=abcd;
    //如何将把源字符串中的a替换成\a 
    System.out.println("abac".replace("a", "\\a"));  // 结果为:\ab\ac
       
    System.out.println("abac".replaceAll("a", "\\\\a")); //结果为:\ab\ac
    
    System.out.println("abac".replaceFirst("a", "\\\\a")); //结果为:\abac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    分析:源字符串是"abac",然后我们找到"a",把它替换成\a,由于\是java转义字符,所以想表达\a必须写成"\a",第一个反斜线将第二个反斜线转义成普通字符串,但是对于replace是这样的,而replaceAll和replaceFirst要求第一个参数是正则表达式,“a"既能理解成字符串a,也可以理解成正则表达式a,所以如果我们想用replaceAll和replaceFirst表达反斜线,就必须再转义一次, 需要用//代表一个/
    简单理解一下,”\\a"中前边的反斜线分别转义后边的反斜线,让后边的反斜线就是普通字符串,这样在java内存中看到的字符串就是"\a",然后replaceAll函数在处理时,再用前边的反斜线转义后边的反斜线,来表达后边的反斜线就是普通字符串,不是用来转义$的,最终内存中的字符串就是"\a",这样才可以成功将a替换成\a

    总结:
    不同点
    1:replace的参数是char和CharSequence,即能够支持字符的交换,也支持字符串的交换(CharSequence即字符串序列的意义,说白了也就是字符串);
    2:replaceAll的参数是regex,即基于正则表达式的交换,比方,能够经过replaceAll(“\d”, “*”)把一个字符串一切的数字字符都换成星号;
    相同点:
    都是全部交换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,假如只想交换第一次呈现的,能够运用replaceFirst(),这个办法也是基于规则表达式的交换,但与replaceAll()不同的是,只交换第一次呈现的字符串;
    另外,假如replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()交换字符串的效果是一样的,即这两者也支持字符串的操作; 还有一点要注意:执行了交换操作后,源字符串的内容是没有发作改动的。

  • 相关阅读:
    AtCoder Beginner Contest 257
    C++:拷贝构造函数的初始化列表
    Web大学生网页作业成品——抗击疫情网站设计与实现(HTML+CSS)
    LeetCode 645. Set Mismatch
    【EMC专题】电磁兼容学科的发展
    面试官:能用JavaScript手写一个bind函数吗
    ajax method to retrieve images as a blob
    查询资源消耗
    地统计学的基本概念及公式详解
    【Leetcode】964. Least Operators to Express Number
  • 原文地址:https://blog.csdn.net/qq_44956118/article/details/127661734