1 编写一段scala代码,将某个文件的行倒转顺序
var source = Source.fromFile("C:/my.ini")
val arr = source.getLines.toArray
val out = new PrintWriter("c:/my.ini")
for (i <- (0 until arr.length).reverse) out.println(arr(i))
out.close()
2 编写一个scala程序,从一个带有制表符的文件读取内容,将每个制表符都替换成空格,使得制表符隔开的n列仍保持对齐
var source = Source.fromFile("C:/my.ini")
val arr = source.getLines.toArray
// 找出第一列中最长的
val max = arr.map { x => x.split("\t")(0).length() }.max
var arr2 = for (i <- 0 until arr.length) yield {
//需要替换的-个数
val num = max - arr(i).split("\t")(0).length() + 1
arr(i).replaceAll("\t", "-" * num)
}
arr2.foreach { println }
3 编写一小段程序,从文件中读取内容,将字符数>12的单词打印到控制台;如果用单行完成,将有额外奖励
Source.fromFile("C:/my.ini").getLines().mkString.split(" ").filter { _.length() > 12 } map { println }
4 编写scala程序,从含有浮点数的文件中读取内容,计算浮点数之和,平均值,最大值和最小值
val words = Source.fromFile("c:/my.ini").getLines().mkString(" ").split(" ")
val regex = new util.matching.Regex("""^\d+\.\d+$""") //匹配浮点类型
val arr = words.filter { regex.findFirstMatchIn(_) != None }.map { _.toDouble }
println("sum:" + arr.sum)
println("max:" + arr.max)
println("min:" + arr.min)
println("average:" + arr.sum / arr.length)
5 编写scala程序,向文件中写入2的n次方及其倒数,指数n从0到20
val out = new PrintWriter("c:/my.txt")
for (n <- 1 to 20) {
val s = n + "\t" + Math.pow(2, n).toInt + "\t" + Math.pow(2, n)
out.println(s)
}
out.close()
6 编写正则表达式,匹配Java或C++中带引号的字符串,并将它打印出来
“like this,maybe with \” or \
val in = Source.fromFile("c:/string.py").getLines().mkString(" ").split(" ")
//匹配以// / ' "开头的字符串
val re = """^((\\\\)|[\"\'\\])\w+""".r
in.filter { re.findFirstMatchIn(_) != None }.map { println }
7 读取文件,将非浮点数打印出来,用正则表达式实现
//非浮点不好匹配,然后找出不是浮点类型的
val re = """^\d+\.\d+$""".r
in.filter { re.findFirstMatchIn(_) == None }.map { println }
8 编写scala程序,打印某个html页面中的所有img标签的src属性
val url = "http://www.360doc.com/content/15/0916/10/27494756_499464687.shtml"
val in = Source.fromURL(url, "UTF-8").mkString("")
// `\\s+`匹配任意的空格字符
//使用非贪婪模式进行匹配
val gre = "(.*?)(<img\\s+?src.+?>)(.*?)".r
for (gre(a, b, c) <- gre.findAllIn(in)) { println(b) }
9 编写scala文件,判断给定目录下有多少个以.class结尾的文件
val dir = new File("D:\\workspace\\mvcTest\\bin\\day12")
val arr = dir.listFiles()
for (elem <- arr ) {
if ("^.+".r.findFirstMatchIn(elem.toString())!=None)
println(elem)
}
10 扩展Person类,并将其序列化;用一个集合保存某人的朋友信息,构造一些Person对象,让他们中一些成为朋友,然后将Array[Person]保存到文件,将这个数组从文件中重新读出来,校验朋友关系是否完好
package day
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import scala.collection.mutable.ArrayBuffer
class Person(val name: String) extends Serializable {
}
object xx extends App {
val friends = new ArrayBuffer[Person]
val p1 = new Person("A")
val p2 = new Person("B")
val p3 = new Person("C")
val p4 = new Person("D")
friends += (p2, p3, p4)
val out = new ObjectOutputStream(new FileOutputStream("c:/p.txt"))
out.writeObject(friends)
val in = new ObjectInputStream(new FileInputStream("c:/p.txt"))
val arr = in.readObject().asInstanceOf[ArrayBuffer[Person]]
arr.foreach { x => println(x.name) }
}
输出:BCD,可知完好