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
     
  • 相关阅读:
    浮动与浮动的清除
    【最全】经典排序算法(C语言)
    Python类中的self到底是干啥的
    浅析Python3中的bytes和str类型
    Shell十三问[转]
    VMware下对虚拟机Ubuntu14系统所在分区sda1进行磁盘扩容
    C语言运算符优先级
    mysql主要性能监控指标
    sql 优化
    npm install安装时忘记--save解决方法
  • 原文地址:https://www.cnblogs.com/LXL616/p/11135933.html
Copyright © 2011-2022 走看看