天天看點

Scala入門到精通——第十二節 I/O與正規表達式

scala i/o操作簡介

scala 寫檔案

scala 讀檔案

scala 網絡i/o

正規表達式簡介

scala正規表達式實戰

i/o操作是一門程式設計語言中的重要内容,在scala中,它更多的是調用java中的i/o類或者通過對java中的i/o類進行相應的封裝來實作i/o操作。在上一節内容中我們已經用到了i/o操作:

scala自身關于i/o的内容比較少,下圖給出的是scala i/o相關的類

Scala入門到精通——第十二節 I/O與正規表達式

可以看到,相比于java語言中的i/o類,scala語言中的i/o相關類數量就顯得少得多,而這其中最常用的隻有source這個類,是以要學好scala i/o操作,必須對java中的i/o相關類有個比較深入的了解。

scala進行檔案寫操作,直接用的都是java中的i/o類,例如

可以看出 scala中的檔案寫操作與java中的i/o操作并沒有什麼差別,這說明了scala可以與java進行互操作。

scala中讀檔案可以直接使用java中的i/o類,也可以用scala中的source對象,該對象對java中的i/o進行了封裝,使用更簡便更靈活,下面的代碼給出了如果讀取檔案并将檔案内容格式化輸出:

scala中的網絡i/o操作可以通過source對象中的fromurl方法來實作,也可以使用原生的java 網絡i/o操作進行,下面的代碼示範的是scala中的網絡i/o讀取百度首頁内容:

在衆多的程式設計語言當中,包括java、perl、php、python、javascript和jscript,都無一例外内生地支援正規表達式處理。scala語言同樣支援正規表達式,當然,scala可以直接通過java操作正規表達式的方式使用正規表達式,但scala實作了自己的方式,它更為靈活。值得一提的是正規表達式并不隻屬于某一門程式語言,它已經超出了某種語言或某個系統的局限,成為被人們廣為使用的工具。

在程式開發中,經常會碰到需要比對、查找、替換、判斷字元串,如果用純編碼方式解決的話,難度較大,而且很浪費時間,通過正規表達式可以解決這些問題。下面給出正規表達式中常用符号的含義:

1 句點符号.,它是一種通配符,用于比對一個字元,例如spa.k,可以比對spark、spaak等任意字母組成的字元串,還可以比對spa#k,spa k等特殊字元組成的字元串

2 [],限定比對,例如spa[ark]k隻會比對spark,spaak,spakk這三個字元串,對于其它的不會比對

3 |, 或比對,例如spa(a|r|rr|k)k,則可以比對spark,spaak,spakk及sparrk

4 $,比對行結束符,例如<code>spark$</code> 比對的是以<code>spark$</code> 為結尾行,例如i love spark,但它不比對spark will be very poupular in the future

5 ^,比對行開始符,例如^spark比對的是以spark開始的行,如spark will be very poupular in the future,不比對i love spark

6 *,比對0至多個字元,例如<code>spar*</code>,可以比對任何spar開始的字元串,如spar,spark,sparkkkkk

7 /,轉義符,例如<code>spark/$</code> 比對的是包含spark$的字元串

8 ( ),分組符,它會将()中比對的内容儲存起來,可以對其進行通路,例如spa(a|r|rr|k)k可以對()中比對的内容儲存為一個臨時變量,在程式中可以直接對其進行通路

9 +,比對一次或多次例如<code>spar+</code>,可以比對任何spar開始的字元串,如spark,sparkkkkk

10 ?,比對0次或一次,例如<code>spark(s)?</code> 可以比對spark和sparks

11 {n},比對n次,例如spark{2},可以比對i love sparkk中的sparkk

12 {n,},至少比對n次,例如spark{2,}可以比對i love sparksss sparkss中的sparksss和sparkss

13 {n,m},至少比對n次,最多比對m次,sparks{2,4}可以比對i love sparks sparkssss中的sparkssss

限定比對[]的用法非常靈活,有必要對其進行進一步的說明:

其它特殊字元:

\ 反斜杠

\t 間隔 (‘/u0009’)

\n 換行 (‘/u000a’)

\r 回車 (‘/u000d’)

\d 數字 等價于[0-9]

\d 非數字 等價于[^0-9]

\s 空白符号 [/t/n/x0b/f/r]

\s 非空白符号 [^/t/n/x0b/f/r]

\w 單獨字元 [a-za-z_0-9]

\w 非單獨字元 [^a-za-z_0-9]

\f 換頁符

\e escape

\b 一個單詞的邊界

\b 一個非單詞的邊界

\g 前一個比對的結束

下面給出最為常用的幾種正規表達式的操作來領略正規表達式的魅力及它在scala中是如何使用的。

1 比對郵箱:

2 比對網址:

3 比對手機号碼:

4 比對ip位址:

在scala中,有一個非常非常強大的功能,那就是提取器(extractor),在後面我們會專門拿一講來講解scala的提取器,本節隻是簡單示範一下提取器是如何與scala中的正規表達式一直使用的。

提取比對的ip位址子段:

提取郵箱中的使用者名:

添加公衆微信号,可以了解更多最新spark、scala相關技術資訊

Scala入門到精通——第十二節 I/O與正規表達式