iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
佛心分享-我的私藏工具箱

正則!好好表達系列 第 26

用Lambda統計Regex符合條件筆數

  • 分享至 

  • xImage
  •  

Java的Regex套件似乎只能跑迴圈一筆筆累加符合條件的片段。

int from = 0;
int count = 0;
while(matcher.find(from)) {
        count++;
        from = matcher.start() + 1;
 }

若用Lambda就一個陳述搞定

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
public class Test1 {
    public static void main(String[] args) throws Exception {
        String str = "\n" +
                "Starting copy...\n" +
                "SQLState = 22001, NativeError = 0" +
                "Error = [Microsoft][ODBC Driver 17 for SQL Server]String data, right truncation" +
                "SQLState = 22001, NativeError = 0" +
                "Error = [Microsoft][ODBC Driver 17 for SQL Server]String data, right truncation" +
                "" +
                "28 rows copied." +
                "Network packet size (bytes): 4096" +
                "Clock Time (ms.) Total     : 51     Average : (549.0 rows per sec.)";
        Pattern failPattern = Pattern.compile("right truncation");
        Matcher failMatcher = failPattern.matcher(str);
        System.out.println(Stream.iterate(0, i -> i + 1)
                .filter(i -> !failMatcher.find())
                .findFirst()
                .get());
     }
 }

得到結果是2,主要是Stream.iterate(0, i -> i + 1).filter(i -> !failMatcher.find()).findFirst().get();這個陳述,但可讀性好像不及規規矩矩的寫迴圈


上一篇
弱掃修正進度追踪
下一篇
Spring Boot的RequestBody檢核
系列文
正則!好好表達30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言