91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中Pattern使用實例分析

發布時間:2022-07-07 14:03:09 來源:億速云 閱讀:115 作者:iii 欄目:開發技術

這篇文章主要介紹“Java中Pattern使用實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java中Pattern使用實例分析”文章能幫助大家解決問題。

1. 正則表達式的應用

在給用戶發送消息時通常情況會有相同的消息模板,但其中部分信息跟用戶相關,因此需要對消息模板中的變量部分進行替換。而對于一個系統而言可能有很多套完全不同的模板。因此需要一個通用的根據實際信息替換消息模板中變量的方法。消息模板的變量與velcity中的變量規范相同。

publicstatic <K, V> String replacePlaceHolderWithMapValue(String msg,Map<K,V> placeHolderMap) {
              Patternpattern = Pattern.compile("\\$*!?\\{([\\w]+)\\}");
              Matchermatcher = pattern.matcher(msg);
              Map<String,String> replaceList = new HashMap();
              while(matcher.find()) {
                     StringplaceHolder = matcher.group(0);
                     Stringkey = matcher.group(1);
                     Objectvalue = placeHolderMap.get(key);
                     if(value != null) {
                            replaceList.put(placeHolder,value.toString());
                     }
              }
              for(Entry<String, String> keyValue:replaceList.entrySet()) {
                     msg= msg.replace(keyValue.getKey(), keyValue.getValue());
              }
              returnmsg;
       }

方法中先獲取所有的需要替換的變量存入replaceList中,然后再依次替換。上述方法的正則表達式中,([\\w]+)表示對匹配的內容中進行捕獲,捕獲值存入matcher.group中,當然也可以有多個捕獲。

2. 常用正則表達式

[abc]     a、b 或 c(簡單類)

[^abc]   任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a到 z 或 A 到 Z,兩頭的字母包括在內(范圍)

[a-d[m-p]]   a到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]]       d、e 或 f(交集)

[a-z&&[^bc]]      a 到 z,除了 b 和 c:[ad-z](減去)

[a-z&&[^m-p]]   a 到 z,而非 m 到 p:[a-lq-z](減去)

.      任何字符(與行結束符可能匹配也可能不匹配)

\d   數字:[0-9]

\D  非數字: [^0-9]

\s   空白字符:[\t\n\x0B\f\r]

\S   非空白字符:[^\s]

\w  單詞字符:[a-zA-Z_0-9]

\W 非單詞字符:[^\w]

\p{Lower}   小寫字母字符:[a-z]

\p{Upper}  大寫字母字符:[A-Z]

X?   X,一次或一次也沒有

X*   X,零次或多次

X+  X,一次或多次

X{n}      X,恰好 n 次

X{n,}     X,至少 n 次

X{n,m}  X,至少 n 次,但是不超過 m 次

(X) X,作為捕獲組

非捕獲

(?=X)    X,通過零寬度的正lookahead

(?!X)      X,通過零寬度的負lookahead

(?<=X)  X,通過零寬度的正lookbehind

(?<!X)   X,通過零寬度的負lookbehind

(?>X)    X,作為獨立的非捕獲組

3 貪婪匹配與懶惰匹配

考慮這個表達式:a.*b,它將會匹配最長的以a開始,以b結束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串aabab。這被稱為貪婪匹配。

有時,我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它后面加上一個問號?。這樣.*?就意味著匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復。

a.*?b匹配最短的,以a開始,以b結束的字符串。如果把它應用于aabab的話,它會匹配aab和ab。

public static void main(String[] args) {
        String str = "北京市(海淀區)(朝陽區)";
        String paternStr = ".*(?=\\()";
        Pattern pattern = Pattern.compile(paternStr);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println(matcher.group(0));
        }
}

上述方法的輸出為:北京市(海淀區)

public static void main(String[] args) {
        String str = "北京市(海淀區)(朝陽區)";
        String paternStr = ".*?(?=\\()";
        Pattern pattern = Pattern.compile(paternStr);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println(matcher.group(0));
        }
}

上述方法輸出:北京市

補充:其它的一些用法

Pattern.split(CharSequence input)

這個方法跟String.split()方法效果類似

Pattern p2 = Pattern.compile("[a-z]+");
// str的長度為2,返回"我愛"和"哈哈",跟 String[] arr = "我愛java哈哈".
String[] arr = p2.split("我愛java哈哈");
Arrays.stream(arr).forEach(System.out::println);

Pattern.matcher(String regex,CharSequence input)

一個靜態方法,用于快速匹配字符串,該方法適合用于只匹配一次,且匹配全部字符串,效果與Pattern.compile(regex).matcher(input).matches() 類似

Pattern p = Pattern.compile("\\d+");
// 返回\d+
System.out.println(p.pattern());
// p.pattern()返回\d+, 這里為true,只有當全部滿足則為true
System.out.println(Pattern.matches(p.pattern(), "2223"));
// 返回false,只要一個不滿足,則返回false
System.out.println(Pattern.matches(p.pattern(), "2223b"));

關于“Java中Pattern使用實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潼关县| 邳州市| 威信县| 延安市| 吉首市| 曲周县| 嘉义市| 阿图什市| 恩平市| 怀柔区| 夏邑县| 大姚县| 温州市| 岳西县| 新龙县| 洛南县| 汉寿县| 黑水县| 自贡市| 遂溪县| 桦甸市| 镇江市| 奈曼旗| 定州市| 新和县| 南澳县| 磐石市| 年辖:市辖区| 登封市| 安国市| 会泽县| 双峰县| 邵武市| 北票市| 商水县| 军事| 泰顺县| 万州区| 梁平县| 满洲里市| 万安县|