【问题标题】:Java replace any numbers in a URL between or after slashesJava 替换 URL 中斜杠之间或斜杠之后的任何数字
【发布时间】:2016-07-12 01:40:13
【问题描述】:

在过去的一个小时里,我一直在努力想出一种使用 Java 的雄辩方式(该应用程序是 Java 语言,所以我必须使用它)来处理特定问题。我试图用主题标签替换 RESTful URL 中的任何数字(即使它有前导零),以便我们可以跟踪特定调用的次数,而不管 ID 是什么。以下是我想要做的一些示例:

http://host.com/api/person/1234 必须是http://host.com/api/person/#####

http://host.com/api/person/1234/jobs 必须是http://host.com/api/person/#####/jobs

http://host.com/api/person/1234/jobs/321 必须是http://host.com/api/person/#####/jobs/#####

http://host.com/api/person/abc1234/jobs需要留下http://host.com/api/person/abc1234/jobs

将插入的主题标签将始终是 5 个主题标签,以保持统一。我使用两个步骤来完成这项工作,我试图找出一种使用正则表达式和 replaceAll 的方法来一次性完成,尽管如果其他人知道一个更好的方法来一步完成,我也对此持开放态度。

【问题讨论】:

  • 叹息。这些天孩子们真的把英镑符号称为“标签”吗?

标签: java regex replace


【解决方案1】:

您可以通过这个简单的regex 使用replaceAll() 方法:

(?<=/)\\d+

这意味着“匹配斜线后的所有数字 (/)”。

示例:

List<String> urls = Arrays.asList("http://host.com/api/person/1234", "http://host.com/api/person/1234/jobs", "http://host.com/api/person/1234/jobs/321", "http://host.com/api/person/abc1234/jobs", "http://host.com/api/person/1234abc/jobs");
for (int i = 0; i < urls.size(); i++) {
   urls.set(i, urls.get(i).replaceAll("(?<=/)\\d+(?=/|$)", "#####"));
}
System.out.println(urls.toString());

// Result:
// [http://host.com/api/person/#####, http://host.com/api/person/#####/jobs, http://host.com/api/person/#####/jobs/#####, http://host.com/api/person/abc1234/jobs, host.com/api/person/1234abc/jobs]

Ideone

【讨论】:

  • 这几乎是完整的答案。在运行我的测试时,它没有涵盖的一种情况是斜线之后是否有数字后跟字母字符。测试是:host.com/api/person/1234abc/jobs 不应被更改,但最终会成为 host.com/api/person/#####abc/jobs。不过,根据提供的信息回答问题,加 1 分。
  • 做到了。谢谢@developer033
猜你喜欢
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2015-03-26
  • 2014-09-09
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多