【发布时间】:2018-12-01 03:03:14
【问题描述】:
我需要提取一个 URL 的子字符串。
网址
-
/service1/api/v1.0/foo->foo -
/service1/api/v1.0/foo/{fooId}->foo/{fooId} -
/service1/api/v1.0/foo/{fooId}/boo->foo/{fooId}/boo
其中一些 URL 可能有请求参数。
代码
String str = request.getRequestURI();
str = str.substring(str.indexOf("/") + 1);
str = str.substring(str.indexOf("/") + 1);
str = str.substring(str.indexOf("/") + 1);
str = str.substring(str.indexOf("/") + 1, str.indexOf("?"));
有没有更好的方法来提取子字符串而不是经常使用indexOf 方法?
【问题讨论】:
-
str.substring("/service1/api/v1.0/".length())? -
根据
/字符将字符串拆分为一个数组。从元素 4 开始循环遍历数组直到结束,重新附加到一个新的 var 中,并在每个元素之间添加一个/。 -
一项性能改进是从其他索引计算索引,而不是多次复制字符串,如
index = str.indexOf("/", index) + 1 -
@JBNizet 你有一个有效的观点。我们有不止一项服务。所以不能用 URL 来比较字符串。
-
如果所有的服务看起来都像
/api/v1.0/...,那么找到公共后缀(即/api/v1.0/)的索引,加上它的长度,并从该索引中获取子字符串。否则,按照 pkpnd 的建议进行操作
标签: java regex string url split