【问题标题】:Replace multiple substrings between delimiters in Java替换Java中分隔符之间的多个子字符串
【发布时间】:2018-06-07 00:18:45
【问题描述】:

我有以下字符串:

String str1 = "could be";
String str2 = "bigger";

并且想要转换这个字符串:

String toConvert = "I ||am|| a ||small|| string.";

进入这个:

"I could be a bigger string."

我如何在 Java 中做到这一点?

【问题讨论】:

  • 到目前为止你尝试过什么?你的逻辑到底是什么?
  • toConvert.replace("||am||", "could be") 等?
  • 提示:String 有一个名为 replace 的方法。
  • 但如果我不知道分隔符之间的文字?
  • 是的,这就是重点,所以您需要在|| 标记之间重复一个单词字符。快乐尝试。

标签: java regex


【解决方案1】:

来自comment:

但是如果我不知道分隔符之间的文字呢?

所以听起来替换值是位置。

最好的方法是使用正则表达式 appendReplacement 循环:

public static String replace(String input, String... values) {
    StringBuffer buf = new StringBuffer();
    Matcher m = Pattern.compile("\\|{2}(.*?)\\|{2}").matcher(input);
    for (int i = 0; m.find(); i++)
        m.appendReplacement(buf, (i < values.length ? values[i] : m.group(1)));
    return m.appendTail(buf).toString();
}

测试

String toConvert = "I ||am|| a ||small|| string.";
System.out.println(replace(toConvert, "could be")); // "small" is retained without markers
System.out.println(replace(toConvert, "could be", "bigger"));
System.out.println(replace(toConvert, "could be", "bigger", "better")); // "better" is ignored

输出

I could be a small string.
I could be a bigger string.
I could be a bigger string.

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2012-04-27
    相关资源
    最近更新 更多