溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

大數(shù)據(jù)Scala系列之文件以及正則表達(dá)式

發(fā)布時(shí)間:2020-05-07 00:14:06 來(lái)源:網(wǎng)絡(luò) 閱讀:342 作者:wx5da18b5c4b01e 欄目:大數(shù)據(jù)

大數(shù)據(jù)Scala系列之文件以及正則表達(dá)式
1 讀取行
導(dǎo)入scala.io.Source后,即可引用Source中的方法讀取文件信息。

import scala.io.Source
object FileDemo extends App{
val source = Source.fromFile("C:/Users/admin/res.txt")
//返回一個(gè)迭代器
val lines = source.getLines()
for(i <- lines)
println(i)
//內(nèi)容也可以放到數(shù)組中
// val arr = source.getLines().toArray
// for(elem <- arr)
// println(elem)
//文件內(nèi)容直接轉(zhuǎn)換成一個(gè)字符串
// val contents = source.mkString
// println(contents)
}

2 讀取字符
按字符讀取文件中的內(nèi)容

import scala.io.Source
object FileDemo extends App{
val source = Source.fromFile("C:/Users/admin/res.txt")
for(c <- source)
println(c)
}

3 讀取單詞
把文件中的內(nèi)容,轉(zhuǎn)換成一個(gè)單詞的數(shù)組

import scala.io.Source
object FileDemo extends App{
val source = Source.fromFile("C:/Users/admin/res.txt")
val contents = source.mkString.split(" ")
for(word <- contents)
println(word)
}

4 讀取網(wǎng)絡(luò)文件
Source可以直接讀取來(lái)自URL等非文件源的內(nèi)容

import scala.io.Source
object FileDemo extends App{
val source = Source.fromURL("http://www.baidu.com")
val lines = source.getLines()
for(i <- lines)
println(i)
}

5 寫文件
scala 沒(méi)有內(nèi)建的對(duì)寫入文件的支持,要寫入文件,使用Java.io.PrintWriter

val out = new PrintWriter("numbers.txt")
for(i <- 1 to 100) out.println(i)
out.close

6 正則表達(dá)式
構(gòu)造一個(gè)Regex對(duì)象,用String類的r方法或者使用new Regex(" ")

如果正則表達(dá)式中包含反斜杠或者引號(hào)的化,可以使用""" """

object RegexDemo extends App{
//構(gòu)建一個(gè)正則表達(dá)式
val numPattern ="[0-9]+".r
//val numPattern = new Regex("abl[ae]\d+")
//構(gòu)建一個(gè)字符串
val matchStr ="98 bottles,99bottles"
//使用findAllIn方法返回所有匹配項(xiàng)的迭代器
for (matchStr <- numPattern.findAllIn(matchStr))
println(matchStr)//98 99
//使用""" """"構(gòu)造含有特殊字符的正則表達(dá)式
val wsnumPattern ="""\s+[0-9]+\s+"""
//調(diào)用findFirstIn方法返回首個(gè)匹配項(xiàng)
val first = numPattern.findFirstIn(matchStr)
println(first) //Some(98)
//調(diào)用findPrefixOf方法返回字符串的開始部分是否能匹配
val ifStartMatch = numPattern.findPrefixOf(matchStr)
println(ifStartMatch)//Some(98)
//調(diào)用replaceFirstIn使用特定的字符串替換首個(gè)匹配項(xiàng)
val res1 = numPattern.replaceFirstIn(matchStr,"xx")
println(res1)//xx bottles,99bottles
//調(diào)用replaceAllIn使用特定的字符串替換所有的匹配項(xiàng)
val res2 = numPattern.replaceAllIn(matchStr,"xx")
println(res2)//xx bottles,xxbottles
}

6 正則表達(dá)式組
分組可以讓我們方便地獲取正則表達(dá)式的子表達(dá)式。在你想要提取的子表達(dá)式兩側(cè)加上圓括號(hào)

object RegexDemo extends App{
//數(shù)字和字母的組合正則表達(dá)式
val numitemPattern="""([0-9]+) ([a-z]+)""".r
val line="666 spark"
for(numitemPattern(num,item) <- numitemPattern.findAllIn(line)){
println(num+"\t"+item)
}
line match{
case numitemPattern(num,item)=> println(num+"\t"+item)
case _=>println("Nothing matched")
}
}

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI