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