精华内容
下载资源
问答
  • 主要介绍了Java中转义字符反斜杠的代替方法及repalceAll内涵解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Java中repalceAll只替换第二个匹配到的字符串

    Java中repalceAll只替换第二个匹配到的字符串


    • String replace replaceFirst repaceAll区别

      • replace(char oldChar, char newChar)
                  返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
      • replaceAll(String regex, String replacement)
                  使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
      • replaceFirst(String regex, String replacement)
                  使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

      总结: replace 替换的是char,replaceAll、replaceFirst替换的可以是字符串,也可以是正则表达式;三者返回的都是一个新的字符串。


    例题
    需求:将字符串 time:[* TO *] 中第二个*替换为 test

    实现代码

    @Test  
    public void replaceSecondStr() {  
        String test = "time:[* TO *]";  
        String result1 = test.replaceAll("(\\*)(.*?)(\\1)(.*?)", "$1$2test$4");  
        System.out.println("原字符串:" + test);
        System.out.println("替换后:" + result1);
    }

    输出:

    原字符串:time:[* TO *]
    替换后:time:[* TO test]

    总结:正则中()表示提取匹配的字符串并分组;会分配存储空间,可以用$1取得匹配到的字符串
    ;\\1表示与第一个()中匹配的内容相同,也可以继续写(\\*);
    (.*?)为勉强匹配方式,意思是匹配任何字符。


    • 补充(取出匹配到的字符串)

      @Test
      public void findGroup() {
          String test = "time:[* TO *]";
          Matcher matcher = Pattern.compile("(\\*)(.*?)(\\1)(.*?)").matcher(test);
          if (matcher.find()) {
              System.out.println(matcher.group());
          }
      }
    展开全文
  • "aaaa,aaaa,aaa".replaceAll(',''') 目标结果"aaaaaaaaaaa" EDGE 中则报错 处理方式"aaaa,aaaa,aaa".replace(/,/g,"") 注意得双引号

    "aaaa,aaaa,aaa".replaceAll(',''') 目标结果 "aaaaaaaaaaa"  EDGE 中则报错

    处理方式 "aaaa,aaaa,aaa".replace(/,/g,"") 注意得双引号

    展开全文
  • 代码 package test; public class Test1 { //去除 \\2.3 这样的字符 public static void main(String[] args) { String a="D:\\temp\\Thinking\\chapter 2\\Object\\2.3\\"; boolean matches = a.matches("^...

    代码

    package test;
    
    public class Test1 {
    
    	//去除 \\2.3 这样的字符
    	public static void main(String[] args) {
    		String a="D:\\temp\\Thinking\\chapter 2\\Object\\2.3\\";
    		boolean matches = a.matches("^.+\\\\\\d+(\\.\\d+)?\\\\$");
    		System.out.println(matches);
    		String replaceAll = a.replaceAll("^\\\\\\d+(\\.\\d+)?$", "");
    		String replaceAll2 = a.replaceAll("\\\\\\d+(\\.\\d+)?", "");
    		String replaceAll3 = a.replaceFirst("^\\\\\\d+(\\.\\d+)?$", "");
    		String replaceAll4 = a.replaceFirst("\\\\\\d+(\\.\\d+)?", "");
    		System.out.println(replaceAll);
    		System.out.println(replaceAll2);
    		System.out.println(replaceAll3);
    		System.out.println(replaceAll4);
    	}
    }
    

    结果

    true
    D:\temp\Thinking\chapter 2\Object\2.3\
    D:\temp\Thinking\chapter 2\Object\
    D:\temp\Thinking\chapter 2\Object\2.3\
    D:\temp\Thinking\chapter 2\Object\
    

    结论

    String 的replaceAll,replaceFirst的正则表达式,不能加上 开始与结束符号;

    展开全文
  • repalceAll (String expr,String substitute){ return Pattern.compile(expr).matcher( this ).replaceAll(substitute); } 大家可以注意到Pattern.compile(expr)的参数是正则表达式。故而: 错误写法...

    一、需求

    现有一个字符串str

    String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";
    System.out.println("str = " + str);

    在控制台的输出为:

    str = {\"name\":\"spy\",\"id\":\"123456\"}

    目标:将str转化为标准的json格式串str1,以调用JsonUtil的方法,将字符串转为map。即目标str1为:

    str1 = {"name":"spy","id":"123456"}

    二、实现方法

    1. 使用 StringEscapeUtils中的转义与反转义

    apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils。利用它可方便地进行html、xml、java等的转义与反转义。

    String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";
    System.out.println("原始 str = " + str);
    String str1 = StringEscapeUtils.unescapeJava(str);
    System.out.println("目标 str1 = " + str1);
    //对应方法的StringEscapeUtils.escapeJava(str1);
    //可将str1转义回str

    控制台输出:

    原始 str = {\"name\":\"spy\",\"id\":\"123456\"}
    目标 str1 = {"name":"spy","id":"123456"}

    2. 使用Java的replaceAll方法

    String str1 = str.replaceAll("\\\\","");
    //控制台str1的输出为:{"name":"spy","id":"123456"}

    三、Java 的replaceAll 内涵解析

    使用Java的replaceAll(String regex, String replacement)函数,即用replacement替换所有的regex匹配项,regex是一个正则表达式,replacement是字符串。

    String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";

    (1)对于串str,Java将其进行转义,\\ 表示 \ ,\” 表示 ” ,故而在Java内存中即为:
    {\”name\”:\”spy\”,\”id\”:\”123456\”},然而,我们的目标是 {“name”:”spy”,”id”:”123456”},即将转义字符 \ 替换为空。

    (2)Java的replaceAll(String regex, String replacement)函数,第一个参数是一个正则表达式。在正则表达式中的“\”与后面紧跟的那个字符构成一个转义字符,代表着特殊的意义,比如”\n”表示换行符等。所以,如果要在正则表达式中表示一个反斜杠\,则应当用\\表达 。但参数regex 首先会经过Java的一次转义,若想表达两个反斜杠 \\,则需四个反斜杠。

    综上所述:replaceAll 的第一个参数是正则表达式,故而要经过两次转义,一次Java、一次正则。因此就需要四个反斜杠才可以匹配一个反斜杠。故而,替换一个反斜杠为空的replaceAll的代码即为:

    str1 = str.replaceAll("\\\\","");

    四、补充说明

    String的replaceAll 同Matcher.replaceAll. 如下是String的repalceAll的源码实现。

    public String repalceAll(String expr,String substitute){
        return Pattern.compile(expr).matcher(this).replaceAll(substitute);
    }

    大家可以注意到Pattern.compile(expr)的参数是正则表达式。故而:

    错误写法(运行报错):
    String tmp = Pattern.compile("\\").matcher("h\\").replaceAll("ello");
    正确写法:
    String tmp = Pattern.compile("\\\\").matcher("h\\").replaceAll("ello");
    //输出为hello

    部分参考 http://blog.csdn.net/north_easter/article/details/7904865

    转载请注明出处:http://blog.csdn.net/proteen/article/details/78885867

    展开全文
  • A.replaceWith(B),用B替换A A.replaceAll(B),用A替换B中的所有节点 转载于:https://www.cnblogs.com/hbzl/p/5924401.html
  • js实现repalceAll方法

    2010-04-16 17:10:46
    [code="java"] desc = "dd ggg ffff"; String.prototype.replaceAll = function(s1,s2){ return this.replace(new RegExp(s1,"gm"),s2);...} ...
  • Java中String的两个常用方法split和replaceAll实际上调用了正则表达式中的方法,因此其字符参数需要考虑到正则表达式中的转义问题 正则表达式中的转义字符:.... \ ... ...如果用以上字符分割或取代字符串,
  • 自定义JSTL函数

    2015-07-17 17:28:08
    ${mj:repalceAll('love','l','e') } 由于 jstl 函数 字符串替换不支持正则表达式 所以想用java String的 replaceAll进行替换 需要自定义 jstl函数 首先写类 package com.salesmanb2b.el; //自定义el函数 ...
  • 字符串的替换方法有replace,repalceAll,replaceFirst,三种替换方法,第一种和第二种区别不是很大,都会将相同的字符串全部替换,只是repalceAll会按正则表达式去匹配,所以使用repalceAll的时候一定要注意转义...
  • java中String类replaceAll函数的应用问题

    千次阅读 2016-10-09 12:16:37
    java中String类的repalceAll函数的应用问题。
  • java中文逗号替换英文逗号

    千次阅读 2019-08-23 11:26:29
    使用java 的 replace 和 repalceAll替换中文逗号时发现,直接使用这两个方法都达不到目的。经过网上查找多时也没什么正确的方法,最后发现 将替换字符串重新赋值给自己问题解决,即 str = str.replace(",",",");...
  • 方法列表: charAt()方法 ...repalceAll()方法 split()方法 substring()方法 String.format()方法 concat(), isEmpty(), length(), trim(), toUpperCase(), toLowerCase()六种方法 一、获取字符串中指...
  • replaceAll遇到的坑

    千次阅读 2018-08-27 11:35:04
    在将url替换为对应的key时出现了无法替换的情况,百思不得其...后来经查发现,repalceAll会使用正则表达式对连接进行进行,很有可能出现不匹配的情况。所以,如果想用完全匹配替换的方式,可以使用replace进行替换。...
  • 使用repalceAll 方法出现java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0异常 代码如下: 1 @Test 2 public void testReplaceAll(){ 3 String sql = "select * from...
  • String的所有方法都忽视空格(除了replace替换类方法) 替换:replaceAll(String initial, String substitution)String str = "hello world";...注意不要忘了用str=str.repalceAll()赋值给原变...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 505
精华内容 202
关键字:

repalceall