猿问

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

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


例如从00 44 88 45 00 25 78 46 00 46 58 00我需要提取44和58(忽略所有出现的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


喵喵时光机
浏览 111回答 1
1回答

芜湖不芜

修复当前方法您可以像这样修复您的方法: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" );提取方法或者,您可以在不替换的情况下提取值:^(?:00(?:\s+00)*\s+)?(\d{2})|(\d{2})(?:\s+00(?:\s+00)*)?$Java演示: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));    }} 输出:4458使用过滤方法进行拆分此外,您可以简单地用空格拆分字符串,删除所有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));                // => 44System.out.println(result.get(result.size()-1));  // => 58
随时随地看视频慕课网APP

相关分类

Java
我要回答