objectReverseLinesextendsApp{ val dir = newFile("src/main/scala/excercises/chapter9") val path: String = dir.getAbsolutePath() val fileName: String = "File.txt" val reverseFileName: String = "ReverseFile.txt"
val source: BufferedSource = Source.fromFile(path + "/" + fileName, "UTF-8")
val linesIterator: Iterator[String] = source.getLines() val linesRecord: Array[String] = linesIterator.toArray val reversedLines: Array[String] = linesRecord.reverse
val linesIterator: Iterator[String] = source.getLines() val linesRecord: Array[String] = linesIterator.toArray val reversedLines: Array[String] = linesRecord.reverse
不宜写成一行:
1
val reversedLinesTest: Array[String] = source.getLines.toArray.reverse
这样可以保存行序倒转后的文本,但是在用source.getlines去遍历的时候已经为空。
第2题
编写 Scala 程序,从一个带有制表符的文件读取内容,将每个制表符替换成一组空格,使得制表符隔开的 n 列仍然保持纵向对齐,并将结果写入同一个文件。
[info] Running excercises.chapter9.TabToSpace TabSpace.txt文件内容如下: a b c d e f g h i j k l m n o p q r s t u v w x y z ABDDEFGH IJKLMNOP QRSTUVWX YZ 替换后TabSpace.txt文件内容如下: a b c d e f g h i j k l m n o p q r s t u v w x y z ABDDEFGH IJKLMNOP QRSTUVWX YZ [success] Total time: 2 s, completed Apr29, 20196:39:53PM
比较坑的一点是有些 IDE 对于 tab 键并不在文本中记录为 tab 字符,需要进行设置,另外,在 vim 当中可以如下设置显示 tab 字符。
编写正则表达式,匹配 Java 或 C++程度代码中类似"like this, maybe with " or \"这样的带引号的字符串。编写 Scala 程序将某个源文件中所有类似的字符串打印出来。
根据题意编码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
package excercises.chapter9
import java.io.File
objectRegExpextendsApp{ val pattern ="""\\\"""".r val dir = new File("src/main/scala/excercises/chapter9") val path: String = dir.getAbsolutePath() val fileName: String = "Regexp.txt" val fileStr = io.Source.fromFile(path + "/" + fileName).mkString // fileStr foreach println pattern.findAllIn(fileStr).foreach(println) }
其中,Regexp.txt文件的内容如下:
1 2 3
wewerwerthwhrtwnb "like this, maybe with \" \\"
测试运行结果如下:
1 2 3 4
[info] Running excercises.chapter9.RegExp \" \" [success] Total time: 3 s, completed May 2, 2019 2:59:13 PM
objectClassFileCountextendsApp{ val path = "." val dir = newFile(path) defsubdirs(dir:File):Iterator[File] = { val children = dir.listFiles().filter(_.getName.endsWith("class")) children.toIterator ++ dir.listFiles().filter(_.isDirectory).toIterator.flatMap(subdirs _) } println("本项目根目录项目一共有:" + subdirs(dir).length + "个以 class 结尾的文件。") }
val dir = newFile("src/main/scala/excercises/chapter9") val path: String = dir.getAbsolutePath() val fileName: String = "test.obj" val out = newObjectOutputStream(newFileOutputStream(path + "/" + fileName)) out.writeObject(persons) out.close()
val in = newObjectInputStream(newFileInputStream(path + "/" + fileName)) val test = in.readObject().asInstanceOf[Array[Person]] assert(test(2).isFriend(test(0)) == true) }