UdeRegexUtils

傳入標的字串型別都是CharSequence,以提供更廣泛的應用情境。 若傳入標的字串為NULL,原則上也是以回傳0/FALSE之類的結果為主,而非丟出NullPointerException。

比對:matches

  • 等效於 Pattern.matches(regex, input)。但增加提供 NULL 字串檢查,當輸入為NULL時,回傳為FALSE。
  • 允許輸入 regex/pattenr 為 NULL,回傳為FALSE,表示無法匹配。
  • 但 regex 格式有誤時,同樣丟出 PatternSyntaxException 。
// boolean matches(CharSequence input, String regex)
// boolean matches(CharSequence input, Pattern regex)

assertTrue(UdeRegexUtils.matches("a", "a"));
assertFalse(UdeRegexUtils.matches("aaaa", "a"));

部分比對:contains/startsWith/endsWith

contains 原則上等同以下程式碼效果。

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
return matcher.find();
  • 相關 METHOD 同樣增加 NULL 容錯處理。
  • 允許輸入 regex/pattenr 為 NULL,回傳為 false ,表示找不到。
 //   boolean contains(CharSequence input, String regex) 
 //   boolean contains(CharSequence input, Pattern pattern) 
 //   boolean startsWith(CharSequence input, String regex) 
 //   boolean startsWith(CharSequence input,  Pattern pattern) 
 //   boolean endsWith(CharSequence input, String regex) 
 //   boolean endsWith(CharSequence input, Pattern pattern) 

assertTrue(UdeRegexUtils.contains("a 1 a", "1"));
assertTrue(UdeRegexUtils.startsWith("a 1 a", "a"));
assertTrue(UdeRegexUtils.endsWith("a 1 a", "a"));

查找資訊:indexOf

找出指定PATTERN在字元串列中的開始位置,若查無指定PATTERN則回傳-1。不合法的NULL輸入,同樣得到-1回傳結果。

assertEquals(7, UdeRegexUtils.indexOf("a123456Ab", "[A-Z]"))
assertEquals(7, UdeRegexUtils.indexOf("a123456Ab", Pattern.compile("[A-Z]")));
assertEquals(-1, UdeRegexUtils.indexOf("", Pattern.compile("1")));
assertEquals(-1, UdeRegexUtils.indexOf(null, Pattern.compile("1")));
assertEquals(-1, UdeRegexUtils.indexOf("1", (Pattern) null));
assertEquals(-1, UdeRegexUtils.indexOf(null, "1"));
assertEquals(-1, UdeRegexUtils.indexOf("1", (String) null));

查找資訊:find/findAll

與MATCH不同,只要PATTERN有出現,回傳結果就有值。預設的回應結果是整段符合PATTERN的部分,也就是group(0)。使用的第二參數類型為Pattern。因Pattern為thread-safe,且在通常使用情境下,此參數物件會重用。故不提供String型別的多載API。可選的第三參數即是指定要回傳的Group index,若超出PATTERN範圍,則視為未輸入此項。

// without group 
assertEquals("BBB", UdeRegexUtils.find("aaaBBBcccAA", Pattern.compile("B+")));
// with group
final Pattern pattern = Pattern.compile("\\$\\{(\\w+)\\}");
// find 找到第一個匹配內容。
assertEquals("name", UdeRegexUtils.find("aaa ${name} aaa", pattern, 1));
assertEquals("work", UdeRegexUtils.find("bbb ${work} bbb ${name}", pattern, 1));
// 指定group 超出範圍, use default=0。
assertEquals("${work}", UdeRegexUtils.find("bbb ${work} bbb ${name}", pattern, -1));
assertEquals("${work}", UdeRegexUtils.find("bbb ${work} bbb ${name}", pattern, 10));
// FindAll
UdeRegexUtils.findAll("1: 2: a: 3:", Pattern.compile("(\\d):"), 1);
// RESULT :  [1, 2, 3]

count

計算指定PATTERN 在字串中出現的次數。

// count(CharSequence, Pattern)
// count(CharSequence, String)
assertEquals(3, UdeRegexUtils.count("aaaBBBccc", "a"));
assertEquals(1, UdeRegexUtils.count("aaaBBBccc", "a+"));
// 預設回應為0的輸入
assertEquals(0, UdeRegexUtils.count(null, "a"));
assertEquals(0, UdeRegexUtils.count("", "a"));
assertEquals(0, UdeRegexUtils.count("string", ""));
assertEquals(0, UdeRegexUtils.count("string", (String) null));

results matching ""

    No results matching ""