欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin利用Regex如何構(gòu)建正則表達(dá)式詳解

 更新時間:2017年12月07日 14:49:24   作者:厚土火焰山  
正則表達(dá)式,又稱規(guī)則表達(dá)式。下面這篇文章主要給大家介紹了關(guān)于Kotlin利用Regex構(gòu)建正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。

前言

對于正則表達(dá)式,相信很多人都知道,但是很多人的第一感覺就是難學(xué),因為看第一眼時,覺得完全沒有規(guī)律可尋,而且全是一堆各種各樣的特殊符號,完全不知所云。

其實只是對正則不了解而以,了解了你就會發(fā)現(xiàn),原來就這樣啊~~正則所用的相關(guān)字符其實不多,也不難記,更不難懂,唯一難的就是組合起來之后,可讀性比較差,而且不容易理解,最近在學(xué)習(xí)kotlin,Kotlin 提供了一個正則表達(dá)式類 Regex,下面來一起學(xué)習(xí)下吧。

Regex 提供了豐富而簡單實用的函數(shù)。

函數(shù)名稱 功能說明
matches(input: CharSequence): Boolean 輸入字符串全部匹配
containsMatchIn(input: CharSequence): Boolean 輸入字符串至少有一個匹配
matchEntire(input: CharSequence): MatchResult? 輸入字符串全部匹配,返回一個匹配結(jié)果對象
replace(input: CharSequence, replacement: String): String 把輸入字符串中匹配的部分替換成replacement的內(nèi)容
replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String 把輸入字符串中匹配到的值,用函數(shù) transform映射之后的新值替換
find(input: CharSequence, startIndex: Int = 0): MatchResult? 返回輸入字符串中第一個匹配的值
findAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult> 返回輸入字符串中所有匹配的值MatchResult的序列

matches

輸入的字符串全部匹配“正則表達(dá)式”返回 true,否則返回 false。

 val r1 = Regex("[a-z]+")
 println(r1.matches("ABCdef"))
 val r2 = Regex("[a-z]+", RegexOption.IGNORE_CASE) //忽略大小寫
 println(r2.matches("ABCdef"))
 val r3 = Regex("[A-Z]+")
 println(r3.matches("ABC"))
 val r4 = "[A-Z]+".toRegex()
 println(r4.matches("ABCDEFXYZ"))

運行結(jié)果

false
true
true
true

containsMatchIn

輸入的字符串中至少有一個匹配就返回 true,否則就返回 false。

 val r5 = Regex("[0-9]+")
 println(r5.containsMatchIn("012abdc"))
 println(r5.containsMatchIn("JAVAI"))

運行結(jié)果

true
false

matchEntire

對字符串全部做比較,都匹配正則表達(dá)式返回一個MatcherMatchResult對象,否則返回 null。

 val r6 = Regex("[0-9]+")
 println(r6.matchEntire("1234567890"))
 println(r6.matchEntire("1234567890!"))
 println(r6.matchEntire("1234567890")?.value)

當(dāng)我們使用 MatcherMatchResult 的 value 值來顯示匹配結(jié)果,由于 matchEntire 函數(shù)有可能返回一個 null,所以這里使用了安全調(diào)用符號“?”。

運行結(jié)果

kotlin.text.MatcherMatchResult@1fb3ebeb
null
1234567890

replace

replace(input: CharSequence, replacement: String): String

輸入的字符串匹配的部分替換成 replacement 的內(nèi)容。

 val r7 = Regex("[0-9]+")
 println(r7.replace("12345XYZ33", "abcd"))

這個例子是把數(shù)字替換成了 abcd。

replace函數(shù)

函數(shù)簽名 replace(input: CharSequence, transform: (MatchResult)->CharSequence): String

它的功能是把輸入的字符串中匹配的值,用函數(shù) transform 映射之后的新值進行替換。

 val r8 = Regex("[0-9]+")
 println(r8.replace("12XYZ9", {(it.value.toInt() * it.value.toInt()).toString()}))

我們可以看到,輸入的字符串中有兩個數(shù)字,一個是 12 在字符串的前部,一個是 9 在字符串的后部。

運行結(jié)果

144XYZ81

12 被替換成了 144,9 被替換成了 81。

find函數(shù)

返回字符串中第一個匹配的 MatcherMatchResult 對象

 val r9 = Regex("[0-9]+")
 println(r9.find("123ADPOIW87WEERUU005"))
 println(r9.find("123ADPOIW87WEERUU005")?.value)

這段代碼,會匹配123,而使用了 value 值的方式顯示出的結(jié)果,我們更加容易理解。

運行結(jié)果

kotlin.text.MatcherMatchResult@1fb3ebeb
123

findAll

返回輸入的字符串中所有匹配的值的 MatchResult 序列。

我們可以通過 forEach 循環(huán)遍歷顯示所有匹配結(jié)果

 val src2 = "電話:010-12345678;傳真:010-10171695;備用:010-20141017"
 val re2 = """(\d{3}-\d{8})""" //"\\d{3}-\\d{8}"
 Regex(re2).findAll(src2).forEach { println(it.value + " 位置:[" + it.range + "]") }

運行結(jié)果

010-12345678 位置:[3..14]
010-10171695 位置:[19..30]
010-20141017 位置:[35..46]

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 詳解Android文件描述符

    詳解Android文件描述符

    這篇文章主要介紹了詳解Android 文件描述符,對Android、Linux源碼感興趣的同學(xué),要著重看一下
    2021-04-04
  • Android ExpandableListView單選以及多選實現(xiàn)代碼

    Android ExpandableListView單選以及多選實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Android ExpandableListView單選以及多選的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 解決android.support.v4.content.FileProvide找不到的問題

    解決android.support.v4.content.FileProvide找不到的問題

    這篇文章主要介紹了解決android.support.v4.content.FileProvide找不到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android開屏頁倒計時功能實現(xiàn)的詳細(xì)教程

    Android開屏頁倒計時功能實現(xiàn)的詳細(xì)教程

    本篇文章主要介紹了Android實現(xiàn)開屏頁倒計時功能實現(xiàn)的詳細(xì)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android SwipeRefreshLayout下拉刷新組件示例

    Android SwipeRefreshLayout下拉刷新組件示例

    SwipeRefrshLayout是Google官方更新的一個Widget,可以實現(xiàn)下拉刷新的效果。本文主要介紹了Android之SwipeRefreshLayout下拉刷新組件示例,有興趣的可以了解一下。
    2017-02-02
  • Android使用CountDownTimer實現(xiàn)倒數(shù)定時器效果

    Android使用CountDownTimer實現(xiàn)倒數(shù)定時器效果

    這篇文章主要介紹了Android使用CountDownTimer實現(xiàn)倒數(shù)定時器效果的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-02-02
  • Android實現(xiàn)中國象棋游戲(局域網(wǎng)版)

    Android實現(xiàn)中國象棋游戲(局域網(wǎng)版)

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)局域網(wǎng)版的中國象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 利用Flutter制作一個會飛的菜單

    利用Flutter制作一個會飛的菜單

    flutter中自帶了drawer組件,可以實現(xiàn)通用的菜單功能,所以本文將嘗試一下通過自定義動畫來實現(xiàn)一個會飛的菜單,感興趣的可以了解一下
    2023-06-06
  • Android仿泡泡窗實現(xiàn)下拉菜單條實例代碼

    Android仿泡泡窗實現(xiàn)下拉菜單條實例代碼

    最近參與android的項目開發(fā),其中遇到這樣的需求:點擊下拉按鈕,顯示出所有的條目,有刪除和點擊功能,點擊后將條目顯示。下面通過實例代碼給大家介紹下Android仿泡泡窗實現(xiàn)下拉菜單條效果,需要的朋友參考下吧
    2017-05-05
  • Android利用FlexboxLayout輕松實現(xiàn)流動布局

    Android利用FlexboxLayout輕松實現(xiàn)流動布局

    flexbox是屬于CSS的一種布局方案,可以簡單、完整、響應(yīng)式的實現(xiàn)各種頁面布局。谷歌將其引入以提高復(fù)雜布局的能力。下面這篇文章主要給大家介紹了在Android中利用FlexboxLayout輕松實現(xiàn)流動布局的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04

最新評論