scala習題九——檔案和正則表示式
阿新 • • 發佈:2019-01-01
1.寫出一個小scala程式,將某個檔案中的行倒轉順序(將最後一行作為第一行,依次類推),記住要import scala.io.source
val source=Source.fromFile("D:\\text.txt","UTF-8");
var lineitrator=source.getLines().toArray;
for(i<-(0 until lineitrator.length).reverse ){
println(lineitrator(i));
}
2.編寫scala程式,從一個帶有製表符的檔案讀取內容,將每個製表符替換成一個空格,使得製表符隔開的n列仍然保持縱向對齊,並將結果寫入同一個檔案
def readzhibiao():Unit={
val source=Source.fromFile("D:\\text.txt","UTF-8");
var lineitrator=source.getLines();
val str=for(i<- lineitrator) yield{
i.replaceAll("\\t", " ");
}
val pw=new PrintWriter("D:\\text.txt");
str.foreach { line => pw.println(line) }
pw.close();
}
編寫一小段Scala程式碼,從一個檔案讀取內容並把所有字元數大於12的單詞列印到控制檯。如果你能用單行程式碼完成會有額外獎勵
Source.fromFile("D:\\text.txt","UTF-8").mkString.split("\\s+").foreach {word => if(word.length()>12) println(word); };
4.編寫scala程式,從包含浮點數的文字檔案讀取內容,打印出檔案中所有浮點數之和,平均值,最大值和最小值
def readfilefloat():Unit={
var sum=0.0;
val source=Source.fromFile("D:\\text.txt" ,"UTF-8").mkString.split("\\s+").foreach {word => if(word.matches("\\d+\\.?\\d*")) sum=sum+word.toDouble };
println(sum);
}
- 編寫Scala程式,向檔案中寫入2的n次方及其倒數,指數n從0到20。對齊各列
def write2(n:Int):Unit={
var exp=BigInt(2);
val out=new PrintWriter("D:\\text.txt");
for(i<- (1 to n)){
out.println(i+" "+1/(exp.pow(i)));
}
out.close();
}
6.編寫正則表示式,匹配Java或C++程式程式碼中類似”like this,maybe with \” or\”這樣的帶引號的字串。編寫Scala程式將某個原始檔中所有類似的字串打印出來
def readregx():Unit={
val Regx="";
val in=Source.fromFile("D:\\text.txt").mkString;
val pattern = "\\w+\\s+\"".r
pattern.findAllIn(in).foreach(println)
}
7.編寫Scala程式,從文字檔案讀取內容,並打印出所有的非浮點數的詞法單位。要求使用正則表示式
def printfloat():Unit={
val pattern="\\d+\\.?\\d*".r;
val source=Source.fromFile("D:\\text.txt").mkString
pattern.findAllIn(source).foreach { println }
}
8.編寫Scala程式打印出某個網頁中所有img標籤的src屬性。使用正則表示式和分組
scala的正則表示式分組形式是val numpattern =”([0-9]+) ([a-z]+)”.r
def printimg():Unit={
val source = Source.fromFile("D:\\text.txt").mkString;
val pattern = """<img[^>]+(src\s*=\s*"[^>^"]+")[^>]*>""".r
for (pattern(str) <- pattern.findAllIn(source)) println(str)
}
9.編寫Scala程式,盤點給定目錄及其子目錄中總共有多少以.class為副檔名的檔案
def readdir(dir:File):Iterator[File]={
//獲取本目錄下所有含有class的檔案,並加入迭代器
val chlidren =dir.listFiles().filter(_.getName().endsWith("class"));
//像children中加入子目錄下所有帶有class的檔案
chlidren.toIterator ++ dir.listFiles().filter(_.isDirectory()).flatMap { readdir _ }
}
var s= readdir(new File("C:\\Users\\pengchen\\workspace\\hello"));
println(s.length);
10.擴充套件那個可序列化的Person類,讓它能以一個集合儲存某個人的朋友資訊。構造出一些Person物件,讓他們中的一些人成為朋友,然後將Array[Person]儲存到檔案。將這個陣列從檔案中重新讀出來,校驗朋友關係是否完好
@SerialVersionUID(42L) class person(val name:String) extends Serializable{
private 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
}
def savefriends(friend:person){
val out=new ObjectOutputStream(new FileOutputStream("D:\\test.obj"));
out.writeObject(friend);
out.close();
}
def readfriends(){
val in = new ObjectInputStream(new FileInputStream("D:\\test.obj"));
val readfriends=in.readObject().asInstanceOf[person];
in.close();
println(readfriends);
}
override def main(args:Array[String]){
// var s= readdir(new File("C:\\Users\\pengchen\\workspace\\hello"));
// println(s.length);
// printimg();
val a=new person("a");
val b=new person("b");
val c=new person("c");
val d=new person("d");
a.addFriend(b);
a.addFriend(c);
a.addFriend(d);
println(a);
savefriends(a);
println(a);
readfriends();
}