Java String.replaceFirst()采用“从”开始的参数

我需要替换一个字符串中的单词,看起来像“duh duh something else duh”。 我只需要替换第二个“duh”,但第一个和最后一个需要保持不变,因此replace()和replaceFirst()不起作用。 是否有像replaceFirst(String regex,String replacement,int offset)这样的方法可以替换从offset开始的第一次替换,或者你可能会推荐其他方法来解决这个问题? 谢谢!

这样的事情怎么样:

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); 

只有一行代码…不是一个完整的方法。

这样的东西会起作用吗?

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

如果您只想替换字符串中第二次出现的模式,那么您实际上不需要这种“从”开始的索引计算。

作为奖励,如果你想要替换所有其他duh (即第二,第四,第六等),那么只需调用replaceAll而不是replaceFirst

使用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; }