[英]Java Regex find() method not returning proper value
我已經在 Java 中創建了一個正則表達式模式,顯然,匹配器類在字符串中找到了它,但它沒有返回正確的值。
如果你看到這個圖像,當我執行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.