zoukankan      html  css  js  c++  java
  • 15.Scala- 文件和正则表达式

    第15章 文件和正则表达式

    15.1 读取行

    import scala.io.Source
    
    object FileSyllabus {
    
      def main(args: Array[String]): Unit = {
        //文件读取
        val file1 = Source.fromFile("D:\Data\Scala\随堂笔记\笔记", "UTF-8")
    
    
        /*
        方式一:
        */
    //    val lines = file1.getLines.mkString("
    ")
    //    println(lines)
    
        /*
        方式二:
         */
    //    val lines = file1.getLines
    //    lines.foreach(println(_))
    
        /*
        方式三:
         */
        val lines = file1.getLines
        for (line <- lines) {
          println(line)
        }
    file1.close
    } }

    尖叫提示:记得close 

    scala> val file1 = Source.fromFile("D:\Data\Scala\随堂笔记\笔记", "UTF-8")
    file1: scala.io.BufferedSource = non-empty iterator


    1) 文件内容转数组:

    val array= file1.getLines.toArray

    2) 文件内容转字符串:

    val iterator = file1.mkString

    15.2 读取字符

     由于Source.fromFile直接返回的就是Iterator[Char],所以可以直接对其进行迭代,按照字符访问里边每一个元素。

    Source.fromFile("C:\Users\61661\Desktop\scala笔记.txt", "UTF-8") 
    for(ch <- file2){
      println(ch)
    }
    file2.close

    15.3 读取词法单元和数字

     如果想将以某个字符或某个正则表达式分开的字符成组读取,可以这么做:

    val file3 = Source.fromFile("D:\Data\Scala\随堂笔记\info.csv")
    val tokens = file3.mkString.split(",")
    println(tokens.mkString(" "))
    file3.close

    15.4 读取网络资源、文件写入、控制台操作

     1) 读取网络资源

    val webFile = Source.fromURL("http://www.baidu.com")
    webFile.foreach(print)
    //等价于:webFile.foreach(print _)
    webFile.close()

    2) 写入数据到文件

    import java.io.{File, PrintWriter}
    val writer = new PrintWriter(new File("嘿嘿嘿.txt"))
    for (i <- 1 to 100)
      writer.println(i)
    writer.close()

    3) 控制台操作

    
    
    import scala.io.{Source, StdIn}

    //
    控制台交互--老API print("请输入内容:") val consoleLine1 = Console.readLine() println("刚才输入的内容是:" + consoleLine1)
    //控制台交互--新API print("请输入内容(新API):") val consoleLine2 = StdIn.readLine() println("刚才输入的内容是:" + consoleLine2)

    /*
    结果:

    请输入内容:hello
    刚才输入的内容是:hello
    请输入内容(新API):hello
    刚才输入的内容是:hello

      */

    15.5 序列化

    @SerialVersionUID(1L) class Person extends Serializable{
      override def toString = name + "," + age
    
      val name = "Nick"
      val age = 20
    
    }
    
    object PersonMain extends App{
      override def main(args: Array[String]): Unit = {
    
        import java.io.{FileOutputStream, FileInputStream, ObjectOutputStream, ObjectInputStream}
        val nick = new Person
        val out = new ObjectOutputStream(new FileOutputStream("Nick.obj"))
        out.writeObject(nick)
        out.close()
    
        val in = new ObjectInputStream(new FileInputStream("Nick.obj"))
        val saveNick = in.readObject()
        in.close()
        println(saveNick)
      }
    }

    15.6 进程控制

     我们可以使用scala来操作shell,scala提供了scala.sys.process包提供了用于shell程序交互的工具。 


    1) 执行shell

    import sys.process._
    "ls -al /"!;
    "ls -al /"!!

     尖叫提示:! 和 !! 的区别在于:process包中有一个将字符串隐式转换成ProcessBuild对象的功能,感叹号就是执行这个对象,单感叹号的意思就是程序执行成功返回0,执行失败返回非0,如果双感叹号,则结果以字符串的形式返回。 

    2) 管道符

    import sys.process._
    "ls -al /" #| "grep etc" !

    3) 将shell的执行结果重定向到文件

    import sys.process._
    "ls -al /" #| "grep etc" !;
    "ls -al /" #>> new File("output.txt") !;

    尖叫提示:注意,每一个感叹号后边,有分号结束
    scala进程还可以提供:
    p #&& q操作,即p任务执行成功后,则执行q任务。
    p #|| q操作,即p任务执行不成功,则执行q任务。
    既然这么强大,那么crontab + scala + shell,就完全不需要使用oozie了。

    15.7 正则表达式

     我们可以通过正则表达式匹配一个句子中所有符合匹配的内容,并输出:

        /*
        正则表达式
         */
        import scala.util.matching.Regex
    
        //实例化第一个正则对象
        val pattern1 = new Regex("(S|s)cala")
    //等价于:
        //实例化第二个正则对象
        val pattern2 = "(S|s)cala".r
    
    
        val str = "Scala is scalable and cool"
        println(pattern2 findAllIn str) //non-empty iterator
        println((pattern2 findAllIn str).mkString(",")) //Scala,scala
     
  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/LXL616/p/11135933.html
Copyright © 2011-2022 走看看