使用Java字符串操作删除查询参数

Sup*_*hne 3 java string url query-parameters string-operations

我有一个简单的问题,但尚未找到最佳解决方案。

想象一下,我有一个带有名为“ id”的查询参数的URL,类似于以下任何一种格式

  • xxxxxxxxxxxxx?id = 123
  • xxxxxxxxxxxxx?id = 123&xxxxxxxx
  • xxxxxxxxxxxxx?xxxxxx&id = 123
  • xxxxxxxxxxxxx?xxxxxx&id = 123&xxxxx

我将上面的字符串(可以是上面的任何一个)作为String参数,并想找出删除查询参数id(名称和值)的最简单方法,因此即使删除后,它也是有效的url 。

以下是我的预期输出(按顺序)。

  • xxxxxxxxxxxxx
  • xxxxxxxxxxxxx?xxxxxxxx
  • xxxxxxxxxxxxx?xxxxxx
  • xxxxxxxxxxxxx?xxxxxx&xxxxx

谁能有个好主意?(仅适用于String操作,没有任何util类)

YCF*_*F_L 5

您可以replaceAll像这样使用正则表达式:

String[] urls = new String[]{
    "xxxxxxxxxxxxx?id=123", "xxxxxxxxxxxxx?id=123&xxxxxxxx", 
    "xxxxxxxxxxxxx?xxxxxx&id=123", "xxxxxxxxxxxxx?xxxxxx&id=123&xxxxx"
};
for (String url : urls) {
    System.out.println(
            url.replaceAll("([\\?&]id=\\d+$)|(id=\\d+&)", "")
    );
}
Run Code Online (Sandbox Code Playgroud)

输出量

xxxxxxxxxxxxx
xxxxxxxxxxxxx?xxxxxxxx
xxxxxxxxxxxxx?xxxxxx
xxxxxxxxxxxxx?xxxxxx&xxxxx
Run Code Online (Sandbox Code Playgroud)

演示版

正则表达式演示


细节

此正则表达式([\?&]id=\d+$)|(id=\d+&)表示要匹配:

  • ([\?&]id=\d+$) 第一组
    • [\?&]匹配文字?&字符
    • id其次是字面id意思
    • \d+ 后跟一位或众数
    • $ 行结束
  • | 要么
  • (id=\d+&) 第二组比赛
    • id匹配文字id
    • \d+ 后跟一位或众数
    • &匹配文字&字符

如果后面的输入id=可以不是数字,则可以使用\w与\ w单词字符匹配的字符,该字符可以与其中的任何字符匹配[A-Za-z0-9_]