elv*_*vis 1 java string java-8 java-stream
我正在使用 java 流,但遇到了问题。我有这个代码:
clients.stream()
.map(Client::getDescription)
.map(x -> x.substring(x.lastIndexOf("_v")))
.map(x -> x.substring(2))
.mapToInt(Integer::parseInt)
.max()
.getAsInt();
Run Code Online (Sandbox Code Playgroud)
每个客户端的描述可能是“John_abc_v1”、“Bill_crce_v2”、“Joe_ghhj_V3”……我得到了最大值,在这种情况下是 3……但问题是 v 可以是小写或大写,而我没有知道如何解决,所以这行不工作 .map(x -> x.substring(x.lastIndexOf("_v"))),我得到String index out of range -1的时候“V”是大写的。我该如何解决?任何反馈都将受到赞赏。
有多种方法,这些只是一些:
按照Sweeper 的建议,将整个字符串小写。这意味着V将转换为v,因此您可以使用 找到它lastIndexOf。
使用正则表达式替换您不想要的字符串部分,即除尾随数字之外的所有内容:
.map(x -> x.replaceAll(".*(\\d+)$", "$1"))
Run Code Online (Sandbox Code Playgroud)
那么对于V.
编写一个查找尾随数字的小方法:
String trailingDigits(String x) {
int last = x.length();
while (last > 0 && Character.isDigit(x.charAt(last - 1)) {
--last;
}
return x.substring(last);
}
Run Code Online (Sandbox Code Playgroud)
并从您的地图调用:
.map(x -> trailingDigits(x))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |