RT。
package com.scalalearn.scala.main
import java.io._
import scala.math._
import scala.collection.mutable.ArrayBuffer
import scala.io.{BufferedSource, Source}
/**
* 快学scala 09习题
*/
class Person extends Serializable{
var friends:ArrayBuffer[Person] = new ArrayBuffer[Person]()
var name:String = ""
def this(name:String){
this()
this.name = name
}
def getName():String={
this.name
}
def addFriend(person:Person): Unit ={
friends += person
}
def getFriendList():Unit = {
for(person <- friends){
print(person.getName()+" ")
}
println
}
}
object LearnScala09 {
//1.编写一段scala代码,将某个文件的行逆序
def execise1(srcFile:String,dstFile:String):Unit = {
var source:BufferedSource = null
try{
source = Source.fromFile(srcFile)
var lines = source.mkString.split("\r\n").reverse
var out = new PrintWriter(dstFile)
for(line<-lines) out.println(line)
if(out != null) out.close()
}catch{
case _:Exception=>println("error")
}finally{
if(source != null) source.close()
}
}
//2.编写一个scala程序,从一个带有制表符的文件读取内容,将每个制表符都替换成空格,使得制表符隔开的n列仍保持对齐
def execise2(srcFile:String):Unit = {
var source:BufferedSource = null
try{
var lines = Source.fromFile(srcFile).mkString
lines = lines.replaceAll("\t"," "*4)
var out = new PrintWriter(srcFile)
out.print(lines)
out.close()
}catch{
case _:Exception=>println("error")
}finally{
if(source != null) source.close()
}
}
//3.编写一小段程序,将字符数>12的单词打印到控制台;如果用单行完成,将有额外奖励
def execise3(srcFile:String):Unit = {
for(line<-Source.fromFile(srcFile).mkString.replaceAll("\r\n"," ").split(" ") if line.length > 12) println(line)
}
//4.编写scala程序,从含有浮点数的文件中读取内容,计算浮点数之和,平均值,最大值和最小值
def execise4(srcFile:String):Unit = {
var arr:ArrayBuffer[Float] = new ArrayBuffer[Float]()
for(line:String<-Source.fromFile(srcFile).mkString.replaceAll("\r\n"," ").split(" ")){
arr += line.toFloat
}
println("total:"+arr.sum)
println("avg:"+arr.sum/arr.toList.size)
println("min:"+arr.min)
println("max:"+arr.max)
}
//5.编写scala程序,向文件中写入2的n次方及其倒数,指数n从0到20
def execise5(dstFile:String):Unit = {
var out = new PrintWriter(dstFile)
var line = ""
for(i <- 0 to 20){
line += pow(2,i)+"\t"+1/pow(2,i)+"\r\n"
}
out.println(line)
out.flush()
out.close()
}
//6.编写正则表达式,匹配Java或C++中带引号的字符串,并将它打印出来
def execise6(srcFile:String):Unit = {
var source:BufferedSource = null
try{
var lines = Source.fromFile(srcFile).mkString.split("\r\n")
val pattern = """["']""".r
for(line <- lines){
if(pattern.findFirstIn(line) != None){
println(line)
}
}
}catch{
case _:Exception=>println("error")
}finally{
if(source != null) source.close()
}
}
//7.读取文件,将非浮点数打印出来,用正则表达式实现
def execise7(srcFile:String):Unit = {
var source:BufferedSource = null
try{
var lines = Source.fromFile(srcFile).mkString.replaceAll("\r\n"," ").split(" ")
val pattern = """\d.\d""".r
for(line <- lines){
if(pattern.findFirstIn(line) != None){
println(line)
}
}
}catch{
case _:Exception=>println("error")
}finally{
if(source != null) source.close()
}
}
//8.编写scala程序,打印某个html页面中的所有img标签的src属性
//用正则分组
def execise8(url:String):Unit = {
var source:BufferedSource = null
try{
var htmlContent = Source.fromURL(url,"utf-8").mkString
//println(htmlContent)
var pattern = """<img.*?>""".r
val srcpattern = """src=("[^"]+")|('[^']+')""".r
var arr = pattern.findAllIn(htmlContent).toArray
for(line <- arr){
println("url:"+line.toString)
if(srcpattern.findFirstIn(line) != None){
println(srcpattern.findFirstIn(line).getOrElse())
}
}
}catch{
case ex:Exception=>println(ex)
}finally{
if(source != null) source.close()
}
}
//9.编写scala文件,判断给定目录下有多少个以.class结尾的文件
def execise9(dir:File):Unit = {
var count:Int = 0
println(dir.listFiles().filter(_.isFile).filter(_.toString.endsWith(".class")).size)
}
//10.扩展Person类,并将其序列化;最后再读取
def execise10():Unit = {
var person1 = new Person("关羽")
var person2 = new Person("刘备")
var person3 = new Person("张飞")
person2.addFriend(person1)
person2.addFriend(person3)
var arrs = Array(person1,person2,person3)
var out = new ObjectOutputStream(new FileOutputStream("d:/personobj"))
out.writeObject(arrs)
out.flush()
out.close()
var in = new ObjectInputStream(new FileInputStream("d:/personobj"))
var readObj:Array[Person] = in.readObject().asInstanceOf[Array[Person]]
println(readObj(1).getName())
readObj(1).getFriendList()
}
def main(args:Array[String]):Unit = {
println("====================execise1=====================")
//LearnScala09.execise1("d:/test1.txt","d:/test2.txt")
println("====================execise2=====================")
//LearnScala09.execise2("d:/test3.txt")
println("====================execise3=====================")
//LearnScala09.execise3("d:/test4.txt")
println("====================execise4=====================")
//LearnScala09.execise4("d:/test5.txt")
println("====================execise5=====================")
//LearnScala09.execise5("d:/test6.txt")
println("====================execise6=====================")
//LearnScala09.execise6("d:/test6.scala")
println("====================execise7=====================")
//LearnScala09.execise7("d:/test7.txt")
println("====================execise8=====================")
//LearnScala09.execise8("http://news.sina.com.cn/2016-05-17/doc-ifxsenvm0533979.shtml")
println("====================execise9=====================")
//LearnScala09.execise9(new File("d:"))
println("====================execise10=====================")
LearnScala09.execise10
}
}