`
Ivan_Pig
  • 浏览: 387283 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

快学Scala习题解答—第九章 文件和正则表达式

 
阅读更多
10 文件和正则表达式

10.1 编写一小段Scala代码,将某个文件中的行倒转顺序(将最后一行作为第一行,依此类推)
import io.Source
import java.io.PrintWriter

val path = "test.txt"

val reader = Source.fromFile(path).getLines()

val result = reader.toArray.reverse

val pw = new PrintWriter(path)

result.foreach(line => pw.write(line + "\n"))

pw.close()


10.2 编写Scala程序,从一个带有制表符的文件读取内容,将每个制表符替换成一组空格,使得制表符隔开的n列仍然保持纵向对齐,并将结果写入同一个文件
import io.Source
import java.io.PrintWriter

val path = "test.txt"

val reader = Source.fromFile(path).getLines()

val result = for ( t <- reader) yield t.replaceAll("\\t","    ")

val pw = new PrintWriter(path)

result.foreach(line => pw.write(line + "\n"))

pw.close()


10.3 编写一小段Scala代码,从一个文件读取内容并把所有字符数大于12的单词打印到控制台。如果你能用单行代码完成会有额外奖励
import io.Source

Source.fromFile("test.txt").mkString.split("\\s+").foreach(arg => if(arg.length > 12) println(arg))


10.4 编写Scala程序,从包含浮点数的文本文件读取内容,打印出文件中所有浮点数之和,平均值,最大值和最小值
import io.Source

val nums = Source.fromFile("test.txt").mkString.split("\\s+")

var total = 0d

nums.foreach(total += _.toDouble)

println(total)
println(total/nums.length)
println(nums.max)
println(nums.min)


10.5 编写Scala程序,向文件中写入2的n次方及其倒数,指数n从0到20。对齐各列:
  1         1
  2         0.5
  4         0.25
...         ...

import java.io.PrintWriter

val pw = new PrintWriter("test.txt")

for ( n <- 0 to 20){
  val t = BigDecimal(2).pow(n)
  pw.write(t.toString())
  pw.write("\t\t")
  pw.write((1/t).toString())
  pw.write("\n")
}

pw.close()


10.6 编写正则表达式,匹配Java或C++程序代码中类似"like this,maybe with \" or\\"这样的带引号的字符串。编写Scala程序将某个源文件中所有类似的字符串打印出来
import io.Source
val source = Source.fromFile("test.txt").mkString

val pattern = "\\w+\\s+\"".r

pattern.findAllIn(source).foreach(println)


10.7 编写Scala程序,从文本文件读取内容,并打印出所有的非浮点数的词法单位。要求使用正则表达式
import io.Source

val source = Source.fromFile("test.txt").mkString

val pattern = """[^((\d+\.){0,1}\d+)^\s+]+""".r

pattern.findAllIn(source).foreach(println)


10.8 编写Scala程序打印出某个网页中所有img标签的src属性。使用正则表达式和分组
import io.Source

val source = Source.fromFile("D:\\ProgramCodes\\ScalaTest\\src\\test.txt").mkString
val pattern = """<img[^>]+(src\s*=\s*"[^>^"]+")[^>]*>""".r

for (pattern(str) <- pattern.findAllIn(source)) println(str)


10.9 编写Scala程序,盘点给定目录及其子目录中总共有多少以.class为扩展名的文件
import java.io.File

val path = "."

val dir = new File(path)


def subdirs(dir:File):Iterator[File]={
  val children = dir.listFiles().filter(_.getName.endsWith("class"))
  children.toIterator ++ dir.listFiles().filter(_.isDirectory).toIterator.flatMap(subdirs _)
}

val n = subdirs(dir).length

println(n)


10.10 扩展那个可序列化的Person类,让它能以一个集合保存某个人的朋友信息。构造出一些Person对象,让他们中的一些人成为朋友,然后将Array[Person]保存到文件。将这个数组从文件中重新读出来,校验朋友关系是否完好
注意,请在main中执行。脚本执行无法序列化。

import collection.mutable.ArrayBuffer
import java.io.{ObjectInputStream, FileOutputStream, FileInputStream, ObjectOutputStream}

class Person(var name:String) extends Serializable{

  val friends = new ArrayBuffer[Person]()

  def addFriend(friend : Person){
    friends += friend
  }

  override def toString() = {
    var str = "My name is " + name + " and my friends name is "
    friends.foreach(str += _.name + ",")
    str
  }
}


object Test extends App{
  val p1 = new Person("Ivan")
  val p2 = new Person("F2")
  val p3 = new Person("F3")

  p1.addFriend(p2)
  p1.addFriend(p3)
  println(p1)

  val out = new ObjectOutputStream(new FileOutputStream("test.txt"))
  out.writeObject(p1)
  out.close()

  val in =  new ObjectInputStream(new FileInputStream("test.txt"))
  val p = in.readObject().asInstanceOf[Person]
  println(p)
}


Blog URL:http://www.ivanpig.com/blog/?p=478
分享到:
评论

相关推荐

    scala正则表达式与模式匹配.doc

    Scala 正则表达式是 Scala 语言中的一种强大工具,用于模式匹配和字符串处理。在 Scala 中,正则表达式可以通过两种方式创建:通过 `r` 方法直接将字符串转换成正则表达式对象,或者直接显式地调用 `Regex` 构造函数...

    快学scala习题及答案详解

    描述中提到的三份文档——"快学scala第一章习题答案.doc"、"快学scala第二章习题答案.doc"、"快学scala第三章习题答案.doc"——暗示了这份学习资料是按照章节结构编排的,每个章节都有对应的习题和详尽的答案。...

    Scala的文件读写操作与正则表达式

    Scala文件读写操作与正则表达式 Scala语言提供了多种文件读写操作的方式,包括读取文本文件、读取二进制文件等。在Scala中,可以使用scala.io.Source对象来读取文件,该对象提供了多种方法来读取文件,例如getLines...

    正则表达式含义.docx

    正则表达式(Regular Expression,简称regex、regexp或RE)是一种文本模式,它由普通字符(如a到z之间的字母)和特殊字符(称为“元字符”)组成,用于描述、匹配一系列符合某个句法规则的字符串。正则表达式是对...

    reb4s:Scala 的正则表达式生成器

    关于 reb4s reb4s的目的是围绕 JRE 的类提供的正则表达式语法提供一个纯 Scala 包装器。 它是一个分支,它通过纯 Java API 提供相同的功能。 与直接编写正则表达式相比,reb4s具有以下优点: reb4s API 保证正确的...

    详解Java中的scala正则表达式

    在Java中使用Scala进行正则表达式操作时,主要依赖于`scala.util.matching`包中的`Regex`类。这个类提供了丰富的功能,允许我们进行复杂的文本匹配和处理。下面我们将详细探讨Scala正则表达式的相关知识。 首先,...

    读书笔记:《快学Scala》课后习题解答.zip

    读书笔记:《快学Scala》课后习题解答

    快学scala的习题和答案

    快学scala的习题和答案,对学习scala有巨大帮助,可以好好学习scala,在学习的过程中可以边看边练习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    正则表达式匹配工具——主流的开发语言(C#、Java、C++、VB、Ruby以及Python等)

    这是一款正则匹配工具,正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个...

    快学scala 完整

    快学scala 完整清晰版 大数据spark 主要的编程语言 快学scala 完整清晰版 大数据spark 主要的编程语言

    golf:基于样本的正则表达式学习器

    攻击计划预计第一个版本会产生朴素的正则表达式,这些正则表达式是有限的并且特定于算法看到的输入。 因此,如果我们想将其概括为各种模式,则消费者有责任提供涵盖各种模式的系统输入。 将使用 * 或

    rexplector:粗略的可视化OpenJDK如何匹配正则表达式

    请注意,仅使用OpenJDK 8、9和10对运行的Rexplector进行了测试。 它是如何工作的? OpenJDK通过将正则表达式转换为对象树来匹配正则表达式。 树中的每个对象都代表正则表达式的构造(或多或少)。 这些对象都是从...

    快学Scala-课后习题答案-源码

    这个"快学Scala"的课后习题答案和源码将涵盖以上提到的大部分知识点,通过实际操作和练习,你可以深入理解Scala的各个方面。解压文件后,可以直接导入到IDE(如IntelliJ IDEA或Scala IDE),按照章节顺序逐步学习,...

    快学 scala 中文版 带完整目录

    第9章 文件和正则表达式 A1 121 9.1 读取行 121 9.2 读取字符 122 9.3 读取词法单元和数字 123 9.4 从URL或其他源读取 124 9.5 读取二进制文件 124 9.6 写入文本文件 124 9.7 访问目录 125 9.8 序列化 125 ...

    《快学Scala》完整版书籍.rar

    7. **文件和正则表达式**:Scala 提供了对文件的读写操作,如读取文件内容、写入数据、创建和删除文件。正则表达式用于文本匹配和处理,提供了丰富的模式匹配功能。 8. **特质**:特质(Trait)类似于接口,但可以...

    快学Scala 课后习题答案集合

    "快学Scala"系列教程可能涵盖了语言基础、类与对象、高阶函数、模式匹配、类型系统、Actor模型以及 Akka 框架等内容。课后习题是学习过程中巩固知识的重要环节,这里我们将深入探讨这些习题答案集合中的关键知识点。...

    快学Scala 课后习题答案集合-中文版

    这个“快学Scala 课后习题答案集合-中文版”涵盖了Scala学习中的关键知识点,包括注解(第十五章)和高级类型(第十八章)等主题。下面将对这些主题进行详细的解释。 **注解(Annotations)** 在Scala中,注解是一种元...

    快学scala答案总汇

    "快学Scala答案总汇"很显然是一个针对Scala初学者或正在学习Scala的人提供的资源,包含了对课程或书籍中习题的解答,帮助读者更好地理解和掌握Scala的核心概念。 1. **基础语法**:Scala的基础语法与Java有诸多不同...

Global site tag (gtag.js) - Google Analytics