gpt4 book ai didi

java - 通过忽略某些元素来提取一组数字的第一次和最后一次出现

转载 作者:行者123 更新时间:2023-11-30 05:30:20 24 4
gpt4 key购买 nike

需要通过忽略某个元素来获取一行数字中的第一次出现和最后一次出现。

例如来自 00 44 88 45 00 25 78 46 00 46 58 00 我需要提取 4458 (忽略所有出现的 00 )。

我正在使用的代码:

  final Pattern p = Pattern.compile( "(?!00)(\\d{2})(\\s)(.*)(?!00)(\\d{2})" );
final Matcher m = p.matcher( "00 44 88 45 00 25 78 46 00 46 58 00" );
final String first = m.replaceAll( "$1" );
final String last = m.replaceAll( "$4" );

System.out.println( "first = " + first );
System.out.println( "last = " + last );

控制台输出:

first = 00 44 00
last = 00 58 00

最佳答案

修复当前方法

您可以像这样修复您的方法:

final Pattern p = Pattern.compile( "^(?:00(?:\\s+00)*\\s+)?(\\d{2})(.*?)(\\d{2})(?:\\s+00(?:\\s+00)*)?$" );
final Matcher m = p.matcher( "00 44 88 45 00 25 78 46 00 46 58 00" );
final String first = m.replaceAll( "$1" );
final String last = m.replaceAll( "$3" );

请参阅Java demo .

提取方法

或者,您可以提取值而不替换:

^(?:00(?:\s+00)*\s+)?(\d{2})|(\d{2})(?:\s+00(?:\s+00)*)?$

请参阅regex demo 。获取第 1 组和第 2 组值。

Java demo :

String s = "00 44 88 45 00 25 78 46 00 46 58 00";
Pattern pattern = Pattern.compile("^(?:00(?:\\s+00)*\\s+)?(\\d{2})|(\\d{2})(?:\\s+00(?:\\s+00)*)?$");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
if (matcher.group(1) != null) {
System.out.println(matcher.group(1));
}
if (matcher.group(2) != null) {
System.out.println(matcher.group(2));
}
}

输出:

44
58

采用过滤方式分割

此外,您可以简单地用空格分割字符串,删除所有 00 项并获取第一个和最后一个项:

String s = "00 44 88 45 00 25 78 46 00 46 58 00";
List<String> result = Arrays.stream(s.split("\\s+"))
.filter(i -> !i.equals("00"))
.collect(Collectors.toList());
System.out.println(result.get(0)); // => 44
System.out.println(result.get(result.size()-1)); // => 58

参见this Java demo .

关于java - 通过忽略某些元素来提取一组数字的第一次和最后一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com