使用 Java8 截断动态值

问题描述

在我的一个应用程序中,我曾经得到一些参考编号,如下所示

BRD.2323-6984-4532-4444..0
BRD.2323-6984-4532-4445..1
BRD.2323-6984-4532-4446
BRD.2323-6984-4532-4446..5
:
:

我如何截断结尾 ..[n] 如果它包含在 Java 中,如下所示。如果它是一个常数,我会像 .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";
String output = input.replaceAll("\\.\\.\\d+$","");
System.out.println(input);   // BRD.2323-6984-4532-4444..0
System.out.println(output);  // BRD.2323-6984-4532-4444

请注意,上述替换不会改变任何没有两个尾随点和数字的参考编号。

,

我注意到其中一个在修改时会导致重复。以下是使用 @TimBiegeleisen's 答案可能证明有用的内容。它将消除重复项。

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);

印刷品

BRD.2323-6984-4532-4444
BRD.2323-6984-4532-4445
BRD.2323-6984-4532-4446