java - 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 字符串执行此操作?
解决方案
您可以使用正则表达式:
/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 个或多个非字符。/
推荐阅读
- java - IDEA 编译器错误 Unknown version '8', no version setting will be given to the compiler
- python-3.x - 尝试使用 Homebrew 更新 Python 3
- python - 为 Keras 预处理数据
- python - gcc 6.3 --> 致命的 Python 错误:Py_Initialize:无法获取语言环境编码 ModuleNotFoundError:没有名为“编码”的模块
- node.js - 从节点调用 nodejs 获取输入
- javascript - 保存回调nodejs的返回
- angular - 在常春藤模式下使用 angular 和 ng-zorro-antd 时遇到错误?
- javascript - 为什么在正则表达式中以某种方式忽略子后的第一个字符?
- powerbi - Power BI 计算相关记录的不同值
- ios - UITableView vs UICollectionView vs UIScrollView?