从 url 字符串中删除特定参数的最佳方法是什么?

What's the best way to get rid of specific parameter from url string?

我有 URL 个字符串,例如:

"http://www.xyz/path?param1=value1¶m2=value2¶m3=value3".

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

"http://www.xyz/path?param1=value1¶m3=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"));

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

你可以使用这个:

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

编辑(在 Alex 发表评论后): 更改上面的模式以包含最后出现的参数。此外,如果在那种情况下需要删除最后一个尾随 &,您可以使用它来代替上面的第二行。

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

第一个模式是这样的:

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

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

注意我使用了String.replaceFirst( String, String )。因此,如果您认为该参数可能会在查询字符串中重复,您可能希望使用 String.replaceAll( String, String ) 代替。