Java String.replaceFirst() that takes a “starting from” argument

前端 未结 3 1663
盖世英雄少女心
盖世英雄少女心 2020-12-19 05:10

I need to replace a word in a string looking like \"duh duh something else duh\". I only need to replace the second \"duh\", but the first and the last ones need to stay unt

相关标签:
3条回答
  • 2020-12-19 05:45

    Will something like this work?

      System.out.println(
         "1 duh 2 duh duh 3 duh"
         .replaceFirst("(duh.*?)duh", "$1bleh")
      ); // prints "1 duh 2 bleh duh 3 duh"
    

    If you just want to replace the second occurrence of a pattern in a string, you really don't need this "starting from" index calculation.

    As a bonus, if you want to replace every other duh (i.e. second, fourth, sixth, etc), then just invoke replaceAll instead of replaceFirst.

    0 讨论(0)
  • 2020-12-19 05:48

    An alternative using Matcher:

     String input = "duh duh something else duh";
     Pattern p = Pattern.compile("duh");
     Matcher m = p.matcher(input);
     int startIndex = 4;
    
     String output;
    
     if (m.find(startIndex)) {
         StringBuffer sb = new StringBuffer();
         m.appendReplacement(sb, "dog");
         m.appendTail(sb);
         output = sb.toString();
     } else {
         output = input;
     }
    
    0 讨论(0)
  • 2020-12-19 06:00

    What about something like this:

    String replaceFirstFrom(String str, int from, String regex, String replacement)
    {
        String prefix = str.substring(0, from);
        String rest = str.substring(from);
        rest = rest.replaceFirst(regex, replacement);
        return prefix+rest;
    }
    
    // or
    s.substring(0,start) +  s.substring(start).replaceFirst(search, replace);
    

    just 1 line of code ... not a whole method.

    0 讨论(0)
提交回复
热议问题