好程式設計師大資料教程分享Scala系列之檔案以及正規表示式

好程式設計師IT發表於2019-10-18

好程式設計師大資料教程分享Scala系列之檔案以及正規表示式

讀取行

匯入scala.io.Source後,即可引用Source中的方法讀取檔案資訊。

import scala.io.Source
object FileDemo  extends App{
   val source = Source.fromFile("C:/Users/admin/res.txt")
     // 返回一個迭代器
   val lines = source.getLines()
   for(i <- lines)
    println(i)
      // 內容也可以放到陣列中 
//  val arr = source.getLines().toArray
//  for(elem <- arr)
//    println(elem)
      // 檔案內容直接轉換成一個字串 
//  val contents = source.mkString
//  println(contents)
}

讀取字元

按字元讀取檔案中的內容

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

讀取單詞

把檔案中的內容,轉換成一個單詞的陣列

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)
}

讀取網路檔案

Source可以直接讀取來自URL等非檔案源的內容

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

寫檔案

scala 沒有內建的對寫入檔案的支援,要寫入檔案,使用Java.io.PrintWriter

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

正規表示式

構造一個Regex物件,用String類的r方法或者使用new Regex(" ")

如果正規表示式中包含反斜槓或者引號的化,可以使用""" """

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

正規表示式組

分組可以讓我們方便地獲取正規表示式的子表示式。在你想要提取的子表示式兩側加上圓括號

object RegexDemo  extends App{
   // 數字和字母的組合正規表示式
   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")
  }
}

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2660514/,如需轉載,請註明出處,否則將追究法律責任。

相關文章