簡體   English   中英

Java Regex find() 方法沒有返回正確的值

[英]Java Regex find() method not returning proper value

我已經在 J​​ava 中創建了一個正則表達式模式,顯然,匹配器類在字符串中找到了它,但它沒有返回正確的值。

如果你看到這個圖像,當我執行m.find()方法時 Eclipse 給了我一個“真”值,但它沒有正確地將它分配給isMatch變量。

當我寫 " if (m.find())時也會發生同樣的情況,它不會進入內部塊。

代碼示例:

{

    private final static String REGEX_PATTERN_FILE_GROUP = "(\\d{14}_\\d{9}_\\D{3}_\\d{11}_)";

    for (File file: fileList) {
        Pattern p = Pattern.compile(REGEX_PATTERN_FILE_GROUP);  
        Matcher m = p.matcher(file.getName());              
        if (m.find())
        {   
           .... More code ...
        }

}

file.getName() 值示例:“1.0-20190409095211_200522007_CNA_20180000959_1_xxxxx.pdf”

顯然, m.find() 是“真”(正如 Eclipse 向我展示的那樣),但它永遠不會進入內部 if 塊,如果我嘗試分配給另一個布爾值也不會。

https://regex101.com/ 中測試並獲得價值。

我的 Java 版本是“1.8.0_181”64 位服務器。

我是 StackOverflow、Java 和 Eclipse 的新手。

查看您的屏幕截圖,其中顯示m.find()true並且分配給isMatch變量的相同值為false ,這意味着兩者都不同步,我能想到的唯一原因是,因為您處於調試模式並且由於您在表達式窗口中擁有它們,因此m.find()似乎被多次執行,其中m.find()的第一次值必須為真,但是當它再次執行時,下次它沒有' t 匹配數據並且m.find()'s值變為false並且最終分配給isMatch變量。

嘗試擺脫調試模式,只運行代碼,變量isMatch的值應該是同步的並且應該是預期的。 或者您甚至可以在調試代碼時關閉表達式窗口,調試應該會按預期提供正確的值。 確保你不要重新評估m.find()否則你的程序會給你意想不到的結果。

此外,永遠不要訪問.group()方法,除非m.find()m.matches()值為true

對我來說,您的代碼按預期工作正常並打印true

String REGEX_PATTERN_FILE_GROUP = "(\\d{14}_\\d{9}_\\D{3}_\\d{11}_)";

String s = "1.0- 20190409095211_200522007_CNA_20180000959_1_xxxxx.pdf";
Pattern p = Pattern.compile(REGEX_PATTERN_FILE_GROUP);
Matcher m = p.matcher(s);
boolean isMatch = m.find();
System.out.println("isMatch: " + isMatch);
if (isMatch) {
    System.out.println(m.group());
}

印刷,

isMatch: true
20190409095211_200522007_CNA_20180000959_

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM