Java在斜杠之间或之后替换URL中的任何数字

时间:2016-07-12 01:40:13

标签: java regex replace

在过去的一小时里,我一直试着用一种雄辩的方式使用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来做一个,虽然如果有人知道一个更好的方法来一步完成它,我打开它作为好。

1 个答案:

答案 0 :(得分:2)

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

(?<=/)\\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