【问题标题】:Replace a String between two Strings在两个字符串之间替换一个字符串
【发布时间】:2016-09-23 03:54:04
【问题描述】:

假设我们有类似的东西:

&firstString=someText&endString=OtherText

我想用其他东西替换“someText”。考虑到我不知道 someText 可能是什么(任何字符串)并且我只知道它将被 &firstString= 和 &endString=

包围,这样做的最佳方法是什么

编辑:抱歉,这似乎不够清楚。我不知道“someText”可能是什么,我唯一掌握的信息是它将在 &firstString= 和 &endString=

之间

我曾考虑多次使用 split 但听起来很难看..

【问题讨论】:

  • 您到底需要做什么?到目前为止,您尝试过什么?
  • 你在重建查询字符串吗?
  • 我对问题进行了澄清,如果不够清楚,抱歉:)

标签: java regex


【解决方案1】:

您可以使用支持正则表达式的String#replaceAll,如下所示:

String newstr = str.replaceAll("(&firstString=)[^&]*(&endString=)", "$1foo$2");

【讨论】:

  • public static String replaceBetween(String theString, String value, String open, String close) { return theString.replaceAll("(" + open + ")[^&]*(" + close + " )", "$1" + 价值 + "$2"); }
  • 与使用 sed 或 perl 命令替换字符串相比,时间性能如何?
  • 这是 Java 问题,所以显然无法与 Unix 工具进行比较
【解决方案2】:

最容易理解的方法是搜索分隔符,并在它们的位置之间剪下一个子字符串,如下所示:

String str = "&firstString=someText&endString=OtherText";
String firstDelim = "&firstString=";
int p1 = str.indexOf(firstDelim);
String lastDelim = "&endString=";
int p2 = str.indexOf(lastDelim, p1);   // look after start delimiter    
String replacement = "quick_brown_fox";
if (p1 >= 0 && p2 > p1) {
    String res = str.substring(0, p1+firstDelim.length())
               + replacement
               + str.substring(p2);
    System.out.println(res);
}

【讨论】:

    【解决方案3】:
    yourString.replace("someText", "somethingElse");
    

    根据澄清进行编辑

    String x = "&firstString=someText&endString=OtherText";
    int firstPos = x.indexOf("&firstString=") + "&firstString=".length();
    int lastPos = x.indexOf("&endString", firstPos);
    String y = x.substring(0,firstPos) + "Your new text" + x.substring(lastPos);
    System.out.println(y);
    

    输出:

    &firstString=Your new text&endString=OtherText
    

    【讨论】:

    • 我只是进一步澄清了这个问题。我不知道 sometext 可能是什么(我只知道它周围的字符串)
    • 标题是:“在两个字符串之间替换一个字符串”:) 如果不清楚,再次抱歉,我的错:)
    【解决方案4】:

    据我了解,您应该这样做,但我不确定我是否完全明白您的要求:

    yourString = firstString + replacingString + endString;
    

    如果你想要“替换”的字符串:

    replacedString = wholeString.substring(0, wholeString.lastIndexOf(endString) - 1);
    replacedString = tempString.substring(firstString.length() + 1);
    

    【讨论】:

      【解决方案5】:

      此解决方案检查我们是否没有结束字符串,并且会多次出现。

       int startIndex = text.indexOf(startDelim);
       while (startIndex > -1)
       {
          int endIndex = text.indexOf(endDelim, startIndex);
          String endPart = "";
      
          if ((endIndex + endDelim.length()) < text.length())
             endPart = text.substring(endIndex + endDelim.length());
      
          text = text.substring(0, startIndex) + replacementText + endPart;
          startIndex = text.indexOf(startDelim);
       }
      

      【讨论】:

        【解决方案6】:

        只是替换整个&amp;firstString=someText&amp;,因为这包括我认为与 URL 相关的外部障碍?

        【讨论】:

        • 我只是进一步澄清了这个问题。我不知道 sometext 可能是什么(我只知道它周围的字符串)
        • @user220755 是的,然后使用 dcp 提到的正则表达式内容并将 sometext 替换为 [^\\&]*
        • 你能再解释一下吗?
        猜你喜欢
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多