【问题标题】:java: simplest way to compare two URLs exluding a parameterjava:比较两个文件(不包括参数)的最简单方法
【发布时间】:2016-03-17 00:41:26
【问题描述】:

给定两个 url,如果排除特定参数(可能存在也可能不存在),它们被认为是相同的,它们将是相同的。

例如,如果我要忽略的参数是 p

,则以下 url 相同
http://www.a.com/b?c=1&p=1
http://www.a.com/b?c=1
http://www.a.com/b?c=1&p=2
http://www.a.com/b/?c=1&p=3
http://www.a.com/b/?p=4&c=1
http://www.a.com/b/?p=5&c=1&

删除p,这些将是

http://www.a.com/b?c=1
http://www.a.com/b?c=1
http://www.a.com/b?c=1
http://www.a.com/b/?c=1
http://www.a.com/b/?c=1
http://www.a.com/b/?c=1

相同的

最简单的方法是什么?我觉得构造一个uri,去掉特定的参数,然后调用toString进行比较,有点矫枉过正。谢谢。

【问题讨论】:

  • 最后两个有一个额外的斜线。
  • 你的问题只提到你想忽略p。
  • 为了清楚起见编辑问题。相同并不意味着文字字符串相同。
  • 那么您是否尝试剥离斜线?如果您尝试使用字符串比较,那么您是否认为它们相同并不重要,重要的是它们是否具有相同的字符。
  • 最后一个后面有一个 & 符号。

标签: java regex uri


【解决方案1】:
String url = "blablable....";
String url_without_p;

int p_index = url.indexOf("p=");
if (p_index == -1) 
{
    url_without_p = url;
}
else 
{
    int end_index = url.indexOf("&", p_index);
    if (end_index == -1)
    {
        url_without_p = url.substring(0, p_index);
    }
    else
    {
       url_without_p = url.substring(0, p_index) + url.substring(end_index);
    }
}
return url_without_p;

【讨论】:

  • 正则表达式可能是一个更简单的选择。虽然不是更快
  • 仅仅删除 p 是不够的,因为参数可以按任何顺序排列。假设我有 a=1&b=2 和 b=2&a=1。 p 甚至不在 url 但比较文字字符串会失败。
  • 上面的代码不关心p的位置。尝试一下。如果 p 不存在,它甚至可以工作
  • 代码只删除了p。我以为您建议删除 p 然后比较两个字符串,这并不能解决我的问题。你能详细说明一下吗?
  • 您要求:“如果排除特定参数,则认为是相同的”。只需选择要排除的参数,执行代码并将结果与​​要比较的其他 url 进行比较。
猜你喜欢
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2015-09-17
  • 2023-02-11
相关资源
最近更新 更多