第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

對 Matcher 類的 asBoolean 方法的誤解

對 Matcher 類的 asBoolean 方法的誤解

慕桂英3389331 2021-12-01 16:59:25
我有一個小測試腳本的問題:import java.util.regex.Pattern;import java.util.regex.Matcher;cfgText = "PATTERN1 = 9\nPATTERN2 = 136.225.73.44\nPATTERN3 = 136.225.236.12"cfgLine = cfgText.split('\n');def p = /.*PATTERN2.*/;def PATTERN2_found = false;for (i=0; PATTERN2_found==false && i < cfgLine.length; i++){    println("cfgLine" +i+ ": " + cfgLine[i]);    def m = cfgLine[i] =~ p;    println("m: " + m)    println("m.asBoolean(): " + m.asBoolean());    println("m: " + m)    println("m.asBoolean(): " + m.asBoolean());    if(m.asBoolean()){        println("Heeeyyyy");    }    println("--------------------------------");}這是它的輸出:cfgLine0: PATTERN1 = 9m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,12 lastmatch=]m.asBoolean(): falsem: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,12 lastmatch=]m.asBoolean(): false--------------------------------cfgLine1: PATTERN2 = 136.225.73.44m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,24 lastmatch=]m.asBoolean(): truem: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,24 lastmatch=PATTERN2 = 136.225.73.44]m.asBoolean(): false--------------------------------cfgLine2: PATTERN3 = 136.225.236.12m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,25 lastmatch=]m.asBoolean(): falsem: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,25 lastmatch=]m.asBoolean(): false如您所見,正則表達式在第二個循環(huán)中匹配,但這種行為對我來說很奇怪。我真的不知道為什么如果我asBoolean對同一個 Matcher 對象使用兩次,結果是不同的。它有內(nèi)部迭代器或類似的東西嗎?PS:我已經(jīng)使用==~運算符解決了這個問題,但我想知道為什么 asBoolean 會這樣工作。
查看完整描述

1 回答

?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

它發(fā)生了,因為StringGroovyMethods.asBoolean(Matcher matcher)調(diào)用matcher.find()修改了匹配器的內(nèi)部狀態(tài)。


/**

 * Coerce a Matcher instance to a boolean value.

 *

 * @param matcher the matcher

 * @return the boolean value

 * @since 1.7.0

 */

public static boolean asBoolean(Matcher matcher) {

    if (null == matcher) {

        return false;

    }


    RegexSupport.setLastMatcher(matcher);

    return matcher.find();

}

來源:src/main/org/codehaus/groovy/runtime/StringGroovyMethods.java


這就是為什么當您m.asBoolean()第一次調(diào)用它時返回true,因為它在此調(diào)用之前的狀態(tài)是(未找到匹配項):


m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,24 lastmatch=]

現(xiàn)在當你m.asBoolean()第二次調(diào)用時,匹配器對象被前一次調(diào)用修改并表示為:


m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,24 lastmatch=PATTERN2 = 136.225.73.44]

它返回false,因為沒有其他部分滿足匹配器。


查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號