scala習題九——文件和正則表達式

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);
    }
  1. 編寫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();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章