[关闭]
@amoszhou 2014-05-13T12:23:43.000000Z 字数 1227 阅读 1228

第九章:文件与正则表达式

scala课后习题


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

  1. def reverseFileLine(fileName : String)={
  2. val source = Source.fromFile(fileName);
  3. val reverseContent = source.toArray.reverse
  4. val out = new PrintWriter(fileName)
  5. reverseContent.foreach(out.print)
  6. out.close()
  7. source.close()
  8. }
  9. reverseFileLine("D:/aa.txt")

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

  1. def replaceTabWithSpace(fileName : String):Unit={
  2. val source = Source.fromFile(fileName);
  3. val tabPattern = """\t""".r
  4. val result = new ArrayBuffer[String]()
  5. source.getLines().foreach(result += tabPattern.replaceAllIn(_ ," "))
  6. val out = new PrintWriter(fileName)
  7. result.foreach(line => out.write(line + "\n"))
  8. source.close()
  9. out.close()
  10. }

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

  1. def wordCounter(fileName : String):Unit={
  2. Source.fromFile(fileName).mkString.split("""\s+""").filter(_.length>12).foreach(println(_))
  3. }

但是这样有个问题,就是流还没有关闭。

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

  1. def printlnFloatValue(fileName : String):Unit={
  2. val source = Source.fromFile(fileName);
  3. val nums = source.getLines().mkString.split("""\s+""").map(_.toDouble)
  4. println(nums.sum)
  5. println(nums.min)
  6. println(nums.max)
  7. println(nums.sum/nums.length)
  8. source.close()
  9. }

后面的题就不想写了,基本上都是这么几个方法,只是正则表达式不同。关键正则表达式的知识可以额外自己去查。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注