首页 > 解决方案 > Java 子串条件结束

问题描述

我有一个字符串,例如:

String test1 = "https://31.191.110.125:443/App/ws/list/play";
String test2 = "https://31.191.110.125:443/App/ws/list";   

我希望上述两个字符串的子字符串输出为/ws/list

/ws//字符串的第一个或结尾(如果没有)/

String sub = test1.substring(test1.indexOf("/ws/"), test1.lastIndexOf("/"));
System.out.println("Substring: " + sub);

以上适用于 test1 字符串,但不适用于 test2 字符串。我该如何为 test2 字符串执行此操作?

标签: javastringsubstring

解决方案


您可以使用正则表达式:

/ws/.*?(?=/|$)

像这样

Matcher m = Pattern.compile("/ws/.*?(?=/|$)").matcher("https://31.191.110.125:443/App/ws/list");
if (m.find()) {
    System.out.println(m.group());
} else {
    System.out.println("There is no /ws/");
}

它首先找到/ws/,然后懒惰地匹配每个字符,直到找到字符串的结尾或/.

您可以在此处查看对正则表达式的更详细说明并测试更多字符串。

编辑:

正如 Andy Turner 所建议的,/ws/[^/]*这是您可以使用的另一个正则表达式,而且速度也更快。它首先找到,然后尽可能多地/ws/匹配 0 个或多个非字符。/


推荐阅读