【问题标题】:What's the best way to get rid of specific parameter from url string? [closed]从 url 字符串中删除特定参数的最佳方法是什么? [关闭]
【发布时间】:2022-01-04 05:55:55
【问题描述】:

我有如下 URL 字符串:

“http://www.xyz/path?param1=value1&param2=value2&param3=value3”。

我只需要去掉param2参数,所以结果应该是:

“http://www.xyz/path?param1=value1&param3=value3”。

我是这样做的:

private String removeParameter(String url, String key) {

      String newParams = "";
      String[] urlArray = url.split("\\?");
      String[] params = urlArray[1].split("&");

      for (String param: params) {

          if (param.contains(key))
              continue;
          else {
              if (newParams != "")
                  newParams = newParams.concat("&");
              newParams = newParams.concat(param);
          }
      }

      return urlArray[0].concat("?").concat(newParams);
  }

    System.out.println("Modified URL: " + removeParameter("http://www.xyz/path?param1=value1&param2=value2&param3=value3", "param2"));

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java arrays string url-parameters


    【解决方案1】:

    你可以使用这个:

    String url = "http://www.xyz/path?param1=value1&param2=value2&param3=value3";
    String r = url.replaceFirst( "param2=[^&]*(&|$)", "" );
    

    编辑(在亚历克斯的评论之后): 更改了上面的模式以包含参数(如果它位于末尾)。此外,如果在这种情况下需要删除最后一个尾随 &,您可以使用它来代替上面的第二行。

    String r = url.replaceAll( "param2=[^&]*(&|$)", "" ).replaceFirst( "&$", "" );
    

    第一个模式是这样工作的:

    • 它首先搜索已知的参数名称,在本例中为param2
    • 然后进一步匹配直到下一个& 或字符串结尾
    • 用空字符串替换匹配的区域

    第二个模式在字符串末尾搜索任何& 并替换为空字符串。

    请注意,我使用了String.replaceFirst( String, String )。因此,如果您认为该参数可能在查询字符串中重复出现,您可能需要改用String.replaceAll( String, String )

    【讨论】:

    • 这将适用于每个参数,但不适用于最后一个参数,因为 url 不以 & 结尾
    • @Álex,谢谢。良好的观察力。我进行了编辑。但是,如果参数出现在末尾,它将保留最后一个&,这在技术上是可以的,但并不优雅。
    • 不错的编辑!它现在似乎工作得很好:)
    猜你喜欢
    • 2015-01-31
    • 2011-05-31
    • 2011-10-03
    • 1970-01-01
    • 2015-07-13
    • 2016-08-11
    • 2021-11-16
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多