2 回答
TA贡献1827条经验 获得超9个赞
您可以将 for 循环缩短为此。
int i = 0, t = 0;
for (; i < url.length(); i++) {
if (url.charAt(i) == '/' && ++t == 4) break;
}
return i;
&&是短路,因此++t == 4只有在url.charAt(i) == '/'为真时才会运行。
TA贡献1848条经验 获得超2个赞
一种解决方案是使用正则表达式模式。这种方法会慢一点,但它可以让您一次性检查更多案例。起初它似乎更冗长,但如果适应您的需要
private static final Pattern urlPattern = Pattern.compile("^(http(s?)://).*?/.*?/(.*)$");
private static int extractPositionTillContextRootInUrl(String url) {
Matcher matcher = urlPattern.matcher(url);
return matcher.matches() ? matcher.start(3) : -1;
}
另一种解决方案是使用 java.net.URL 对象
private static int extractPositionTillContextRootInUrl(String url) {
try {
return new URL(url).getPath().indexOf("/", 1);
} catch (MalformedURLException e) {
return -1;
}
}
添加回答
举报