Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java8截断动态值_Java_Java 8_Substring_Truncate - Fatal编程技术网

使用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