亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過忽略某些元素來提取一組數字的第一次和最后一次出現

通過忽略某些元素來提取一組數字的第一次和最后一次出現

喵喵時光機 2023-06-21 16:38:56
需要通過忽略某個元素從一行數字中獲取第一次出現和最后一次出現。例如從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 00last = 00 58 00
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

修復當前方法

您可以像這樣修復您的方法:


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

? ? }

}?

輸出:


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



查看完整回答
反對 回復 2023-06-21
  • 1 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號