gpt4 book ai didi

java - 字符串中的第 N 个索引?

转载 作者:行者123 更新时间:2023-11-30 06:07:35 27 4
gpt4 key购买 nike

我需要提取 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 方法?

最佳答案

有很多替代方法:

  1. 在带有 \ 分隔符的分割字符串上使用 Java-Stream API:

    String str = "/service1/api/v1.0/foo/{fooId}/boo";  
    String[] split = str.split("\\/");
    String url = Arrays.stream(split).skip(4).collect(Collectors.joining("/"));
    System.out.println(url);

    删除参数后,Stream 将如下所示:

    String url = Arrays.stream(split)
    .skip(4)
    .map(i -> i.replaceAll("\\?.+", ""))
    .collect(Collectors.joining("/"));
  2. 这也是Regex的地方取代它的位置!使用 Pattern 和 Matcher 类。

    String str = "/service1/api/v1.0/foo/{fooId}/boo";

    Pattern pattern = Pattern.compile("\\/.*?\\/api\\/v\\d+\\.\\d+\\/(.+)");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
    System.out.println(matcher.group(1));
    }

如果您依赖 indexOf(..) 用法,您可能需要使用 while 循环。

String str = "/service1/api/v1.0/foo/{fooId}/boo?parameter=value"; 

String string = str;
while(!string.startsWith("v1.0")) {
string = string.substring(string.indexOf("/") + 1);
}

System.out.println(string.substring(string.indexOf("/") + 1, string.indexOf("?")));

其他答案包括一种方法,如果前缀不可变,您可能只想使用一次 idndexOf(..) 方法调用 ( @JB Nizet ):

string.substring("/service1/api/v1.0/".length(), string.indexOf("?"));
<小时/>

所有这些解决方案都基于您的输入和事实,模式已知,或者至少是用 \ 分隔的上一节的编号或版本 v1.0 作为检查点 - 最佳解决方案可能不会出现在这里,因为 URL 的组合有无限种。您必须了解输入 URL 的所有可能组合才能找到处理它的最佳方法。

关于java - 字符串中的第 N 个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50974311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com