使用Java8截断动态值
在我的一个应用程序中,我曾经得到一些参考号,如下所示使用Java8截断动态值,java,java-8,substring,truncate,Java,Java 8,Substring,Truncate,在我的一个应用程序中,我曾经得到一些参考号,如下所示 BRD.2323-6984-4532-4444..0 BRD.2323-6984-4532-4445..1 BRD.2323-6984-4532-4446 BRD.2323-6984-4532-4446..5 : : 如果在Java中包含,我如何截断结尾..[n],如下图所示。如果它是一个常量,我会使用子字符串,比如.substring(0,value.indexOf(“…0”)),因为这个数字是动态的,我应该使用正则表达式吗 BRD.23
BRD.2323-6984-4532-4444..0
BRD.2323-6984-4532-4445..1
BRD.2323-6984-4532-4446
BRD.2323-6984-4532-4446..5
:
:
如果在Java中包含,我如何截断结尾..[n],如下图所示。如果它是一个常量,我会使用子字符串,比如.substring(0,value.indexOf(“…0”))
,因为这个数字是动态的,我应该使用正则表达式吗
BRD.2323-6984-4532-4444
BRD.2323-6984-4532-4445
BRD.2323-6984-4532-4446
BRD.2323-6984-4532-4446
:
:
有人能帮我一下吗你可以在这里用正则表达式替换:
String input=“BRD.2323-6984-4532-4444..0”;
字符串输出=输入.replaceAll(“\\.\.\\d+$”,“”);
System.out.println(输入);//BRD.2323-6984-4532-4444..0
System.out.println(输出);//BRD.2323-6984-4532-4444
请注意,上述替换不会改变任何没有两个尾随点和数字的参考号。我注意到其中一个在修改时会导致重复。下面是一些可能被证明有用的答案。它将消除重复项
List<String> values = List.of(
"BRD.2323-6984-4532-4444..0",
"BRD.2323-6984-4532-4445..1",
"BRD.2323-6984-4532-4446",
"BRD.2323-6984-4532-4446..5");
UnaryOperator<String> modify = str->str.replaceAll("\\.\\.\\d+$", "");
Set<String> set = values.stream()
.map(modify::apply)
.collect(Collectors.toSet());
set.forEach(System.out::println);
谢谢你的快速回复。如果它带有超过一位数的字符,例如.,这会很小心吗。。10@AlexMan是的,它会的,尝试代码来验证这一点。为什么
replaceAll
而不是replaceFirst
?@Holger如果我告诉你我从未使用过String#replaceFirst
?实际上,性能方面的问题在这里并不重要,因为我使用的正则表达式模式的范围仅限于在输入的末尾进行替换。但是,你是对的,我同意你的评论。或者你可以简单地使用.substring(0,value.indexOf(“…”),假设在你的输入中没有其他“.”的出现。当你可以只写.map(modify::apply)
时,写.map(modify)
就没有意义了。
BRD.2323-6984-4532-4444
BRD.2323-6984-4532-4445
BRD.2323-6984-4532-4446