Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

remove query parameter with java string operations

I have a simple problem and yet to find the optimal solution.

Imagine I have a url with a query param named 'id' like any of the following formats

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

I'm taking the above string (could be any one above) as a String parameter and want to figure out the simplest way to remove the query parameter id (name and value), so that even after removing, it will be a valid url.

Below are my expected outputs (in order).

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

Can anyone have a good idea? (only with String operations, without any util classes)

like image 762
Supun Wijerathne Avatar asked Oct 15 '25 14:10

Supun Wijerathne


2 Answers

You can use replaceAll which is using regex like so :

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+&)", "")
    );
}

Output

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

Demo

Regex demo


Details

this regex ([\?&]id=\d+$)|(id=\d+&) mean to match :

  • ([\?&]id=\d+$) first group
    • [\?&] match literal ? or & character
    • id followed by literal id word
    • \d+ followed by one or mode digit
    • $ end of line
  • | or
  • (id=\d+&) match group two
    • id match literal id word
    • \d+ followed by one or mode digit
    • & match literal & character

If you the input after id= can be other than a digit you can use \w instead which match \w word character which can match any character in [A-Za-z0-9_]

like image 187
YCF_L Avatar answered Oct 18 '25 08:10

YCF_L


Another approach without regex:

String removeParameter(String url, String paramToRemove) {
    String[] parts = url.split("\\?");
    if (parts.length == 2) {
        String base = parts[0];
        String params = parts[1];

        return base + "?" + Stream.of(params.split("&"))
                .map(p -> p.split("="))
                .filter(p -> !p[0].equals(paramToRemove))
                .map(p -> String.join("=", p))
                .collect(Collectors.joining("&"));
    } else {
        return url;
    }
}

And use it like this:

removeParameter("xxxxxxxxxxxxx?xxxxxx&id=123", "id") // xxxxxxxxxxxxx?xxxxxx
like image 34
Krzysztof Atłasik Avatar answered Oct 18 '25 07:10

Krzysztof Atłasik



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!