标签:
1. 编写一小段Scala代码,将某个文件中的行倒转顺序,将最后一行作为第一行,依此类推 
程序代码:
- 
import scala.io.Source 
 
- 
import java.io.PrintWriter 
 
- 
 
 
- 
object ReverseLines extends App { 
 
- 
  val filename="File.txt" 
 
- 
  val RefileName="ReverseFile.txt" 
 
- 
 
 
- 
  val source=Source.fromFile("src\\"+filename) 
 
- 
  lazy val ReSource=Source.fromFile("src\\"+RefileName) 
 
- 
  lazy val pw = new PrintWriter("src\\"+RefileName) 
 
- 
 
 
- 
  val linesIterator=source.getLines() 
 
- 
  val linesRecord=linesIterator.toArray 
 
- 
  val reverseRecord=linesRecord.reverse 
 
- 
 
 
- 
  reverseRecord.foreach { 
 
- 
    line =>pw.write(line+"\n") 
 
- 
  } 
 
- 
  pw.close() 
 
- 
 
 
- 
  println(filename+"文件内容如下:") 
 
- 
  linesRecord.foreach (line=>println(line)) 
 
- 
 
 
- 
  println(RefileName+"文件内容如下:") 
 
- 
  ReSource.getLines().foreach(line=>println(line)) 
 
- 
} 
 
运行结果:
File.txt文件内容如下: 
Inc said they plan to form a venture to manage the money market 
borrowing and investment activities of both companies. 
 BP North America is a subsidiary of British Petroleum Co 
Plc <BP>, which also owns a 55 pct interest in Standard Oil. 
 The venture will be called BP/Standard Financial Trading 
and will be operated by Standard Oil under the oversight of a 
joint management committee. 
ReverseFile.txt文件内容如下: 
joint management committee. 
and will be operated by Standard Oil under the oversight of a 
 The venture will be called BP/Standard Financial Trading 
Plc <BP>, which also owns a 55 pct interest in Standard Oil. 
 BP North America is a subsidiary of British Petroleum Co 
borrowing and investment activities of both companies. 
Inc said they plan to form a venture to manage the money market 
2. 编写Scala程序,从一个带有制表符的文件读取内容,将每个制表符替换成一组空格,使得制表符隔开的n列仍然保持纵向对齐,并将结果写入同一个文件 
程序代码:
- 
object TabSpace extends App{ 
 
- 
  val FileName="TabSpace" 
 
- 
  val path="src\\"+FileName+".txt" 
 
- 
  val linesIterator=Source.fromFile(path).getLines() 
 
- 
  lazy val TabIterator=Source.fromFile(path).getLines() 
 
- 
  val linesRecord=linesIterator.toArray 
 
- 
  lazy val pw=new PrintWriter(path) 
 
- 
  println(FileName+"文件内容如下:") 
 
- 
  linesRecord.foreach(println) 
 
- 
  linesRecord.foreach { 
 
- 
    line =>pw.write(line.replaceAll("\t", "")+"\n") 
 
- 
  } 
 
- 
  pw.close 
 
- 
  println("替换后"+FileName+"文件内容如下:") 
 
- 
  TabIterator.foreach(println) 
 
- 
 
 
- 
} 
 
运行结果:
TabSpace文件内容如下:
Inc    said    they    plan    to    form    a    venture    to    manage    the    money    market 
Inc    ssss    adfs    sdjf    sd    dskl    s    jdakwus    sd    sdskkl    sds    sdsds    djslkl 
Inc    said    they    plan    to    form    a    venture    to    manage    the    money    market 
Inc    ssss    adfs    sdjf    sd    dskl    s    jdakwus    sd    sdskkl    sds    sdsds    djslkl 
Inc    said    they    plan    to    form    a    venture    to    manage    the    money    market         
替换后TabSpace文件内容如下:
Inc said they plan to form a venture to manage the money market 
Inc ssss adfs sdjf sd dskl s jdakwus sd sdskkl sds sdsds djslkl 
Inc said they plan to form a venture to manage the money market 
Inc ssss adfs sdjf sd dskl s jdakwus sd sdskkl sds sdsds djslkl 
Inc said they plan to form a venture to manage the money market
3. 编写一小段Scala代码,从一个文件读取内容并把所有字符数大于12的单词打印到控制台。如果你能用单行代码完成会有额外奖励 
程序代码:
- 
object CheckString extends App{ 
 
- 
  val FileName="CheckString" 
 
- 
  val path="src\\"+FileName+".txt" 
 
- 
  println(FileName+"文件中长度大于12的字符串为:") 
 
- 
  io.Source.fromFile(path).mkString.split("\\s+").foreach (str => if(str.length()>12) println(str)) 
 
- 
} 
 
运行结果:
CheckString文件中长度大于12的字符串为:
Incsaidtheyplan 
jdakwussdsdskkl 
managethemoneymarket 
dsklsjdakwussdsdskkl 
venturetomanagethe
4. 编写Scala程序,从包含浮点数的文本文件读取内容,打印出文件中所有浮点数之和,平均值,最大值和最小值 
程序代码:
- 
object ReadNumber extends App{
 
- 
  val pattern="(\\d+[.]\\d+)".r
 
- 
  val pattern1="^\\d+(\\.\\d+)?".r
 
- 
  val pattern2="[0-9]+(\\.\\d+)?".r
 
- 
  val FileName="NumberFile"
 
- 
  val path = "src\\"+FileName+".txt"
 
- 
  val FileStr=io.Source.fromFile(path).mkString
 
- 
  val StrArray=pattern2.findAllIn(FileStr).toArray
 
- 
  var total=0d
 
- 
  val len=StrArray.length
 
- 
  StrArray.foreach (total +=_.toDouble)
 
- 
  println("文本中浮点数总和: "+total)
 
- 
  println("文本中浮点数平均数: "+total/len+len)
 
- 
  println("文本中浮点数的最大值: "+StrArray.max)
 
- 
  println("文本中浮点数的最大值: "+StrArray.min)
 
- 
}
 
测试数据:
joint    55    666.0    management    13.5    committee    12.5 
joint    6.0    123.4    management    3.14    committee    170.5 
joint    52    63.32    management    10.4    committee    12.5 
运行结果:
文本中浮点数总和: 1188.26
文本中浮点数平均数: 99.0216666666666612
文本中浮点数的最大值: 666.0
文本中浮点数的最大值: 10.4
5. 编写Scala程序,向文件中写入2的n次方及其倒数,指数n从0到20。对齐各列: 
1 1 
2 0.5 
4 0.25 
... ... 
程序代码:
- 
import java.io.PrintWriter 
 
- 
 
 
- 
object index extends App{ 
 
- 
  val FileName="Index" 
 
- 
  val path="src\\"+FileName+".txt" 
 
- 
  val out=new PrintWriter(path) 
 
- 
  for (i <- 0 to 20) 
 
- 
    out.println(OutIndex(i)) 
 
- 
  out.close 
 
- 
  def OutIndex(n:Int)={ 
 
- 
    val value=math.pow(2, n) 
 
- 
    ""*4+value.toInt+""*(11-value.toString().size)+math.pow(2, -n) 
 
- 
  } 
 
- 
} 
 
运行结果:
 1 1.0 
 2 0.5 
 4 0.25 
 8 0.125 
 16 0.0625 
 32 0.03125 
 64 0.015625 
 128 0.0078125 
 256 0.00390625 
 512 0.001953125 
 1024 9.765625E-4 
 2048 4.8828125E-4 
 4096 2.44140625E-4 
 8192 1.220703125E-4 
 16384 6.103515625E-5 
 32768 3.0517578125E-5 
 65536 1.52587890625E-5 
 131072 7.62939453125E-6 
 262144 3.814697265625E-6 
 524288 1.9073486328125E-6 
 1048576 9.5367431640625E-7
6. 编写正则表达式,匹配Java或C++程序代码中类似"like this,maybe with \" or\\"这样的带引号的字符串。编写Scala程序将某个源文件中所有类似的字符串打印出来 
描述:没看太懂,按自己意思来的
程序代码:
- 
import scala.io.Source 
 
- 
 
 
- 
object regExp extends App{ 
 
- 
  val FileName="Regexp" 
 
- 
  val path="src\\"+FileName+".txt" 
 
- 
  val pat1=""""like this,maybe with \\" or\\{2}"""".r 
 
- 
  val pat2="""like this,maybe with \\" or\\{2}""".r 
 
- 
  val pat3="""\w+\s+\\"""".r 
 
- 
  val linesIterator1=Source.fromFile(path).getLines() 
 
- 
  val linesIterator2=Source.fromFile(path).getLines() 
 
- 
  val linesIterator3=Source.fromFile(path).getLines() 
 
- 
  println("文本中包含:"+""""like this,maybe with \" or\\"""") 
 
- 
  linesIterator1.foreach(line=>pat1.findAllIn(line).foreach (println)) 
 
- 
  println("文本中包含:"+"""like this,maybe with \" or\\""") 
 
- 
  linesIterator2.foreach(line=>pat2.findAllIn(line).foreach (println)) 
 
- 
  println("文本中包含:"+"\\w+\\s+\"") 
 
- 
  linesIterator3.foreach(line=>pat3.findAllIn(line).foreach(println)) 
 
- 
} 
 
运行结果:
文本中包含:"like this,maybe with \" or\\" 
"like this,maybe with \" or\\"
文本中包含:like this,maybe with \" or\\ 
like this,maybe with \" or\\
like this,maybe with \" or\\
like this,maybe with \" or\\
文本中包含:\w+\s+" 
with \" 
with \" 
with \"
7. 编写Scala程序,从文本文件读取内容,并打印出所有的非浮点数的词法单位。要求使用正则表达式
程序代码:
- 
import io.Source 
 
- 
object NonFloat extends App{ 
 
- 
  val source = Source.fromFile("src\\NumberFile.txt").mkString 
 
- 
  val pat1 = """[^((\d+\.){0,1}\d+)^\s+]+$""".r//去掉+试试
 
- 
  val pat2 = """^((?!^[-]?\d*\.\d+$).)+$""".r 
 
- 
  println("模式1不包含整数:") 
 
- 
  for(token <- source.split("\\s+")){ 
 
- 
    for(word <- pat1.findAllIn(token)) 
 
- 
      if(!word.equals("")){ 
 
- 
        println(token) 
 
- 
      } 
 
- 
  } 
 
- 
  println("模式2包含整数:") 
 
- 
  for(token <- source.split("\\s+")){ 
 
- 
    for(word <- pat2.findAllIn(token)) 
 
- 
      println(word) 
 
- 
  } 
 
- 
} 
 
测试数据:
joint    55    666.0    management    13.5    committee    12.5 
joint    6.0    123.4    management    3.14    committee    170.5 
joint    52    63.32    management    10.4    committee    12.5 
0.12t    20    5.6ef    45.77ghjss    5.94    dfdxsccxz    7.9
运行结果:
模式1不包含整数: 
joint 
management 
committee 
joint 
management 
committee 
joint 
management 
committee 
0.12t 
5.6ef 
45.77ghjss 
dfdxsccxz 
模式2包含整数: 
joint 
55 
management 
committee 
joint 
management 
committee 
joint 
52 
management 
committee 
0.12t 
20 
5.6ef 
45.77ghjss 
dfdxsccxz
8. 编写Scala程序打印出某个网页中所有img标签的src属性。使用正则表达式和分组
程序代码:
- 
object WebSrc extends App{
 
- 
  val pat = """<img.*?src=["‘](.+?)["‘].*?>""".r
 
- 
  for (pat(src) <-pat.findAllIn(io.Source.fromURL("http://www.baidu.com").mkString)) {
 
- 
    println(src)
 
- 
  }
 
- 
}
 
运行结果:
//www.baidu.com/img/bd_logo1.png 
//www.baidu.com/img/baidu_jgylogo3.gif 
9. 编写Scala程序,盘点给定目录及其子目录中总共有多少以.class为扩展名的文件
程序代码:
- 
import java.io.File
 
- 
object NumDir extends App{
 
- 
  val path = "."
 
- 
  val dir = new File(path)
 
- 
  def subdirs(dir:File):Iterator[File]={
 
- 
    val children = dir.listFiles().filter(_.getName.endsWith("class"))
 
- 
    children.toIterator ++ dir.listFiles().filter(_.isDirectory).toIterator.flatMap(subdirs _)
 
- 
  }
 
- 
  val n = subdirs(dir).length
 
- 
  println(n)
 
- 
}
 
运行结果:
52
10. 扩展那个可序列化的Person类,让它能以一个集合保存某个人的朋友信息。构造出一些Person对象,让他们中的一些人成为朋友,然后将Array[Person]保存到文件。将这个数组从文件中重新读出来,校验朋友关系是否完好 注意,请在main中执行。脚本执行无法序列化。 
程序代码:
- 
import collection.mutable.ArrayBuffer 
 
- 
import java.io.{ObjectInputStream, FileOutputStream, FileInputStream, ObjectOutputStream} 
 
- 
 
 
- 
class Person(var name:String) extends Serializable{ 
 
- 
  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 
 
- 
  } 
 
- 
} 
 
- 
 
 
- 
object PersonTest extends App{ 
 
- 
  val p1 = new Person("JackChen") 
 
- 
  val p2 = new Person("Jhon·D") 
 
- 
  val p3 = new Person("Sunday") 
 
- 
  p1.addFriend(p2) 
 
- 
  p1.addFriend(p3) 
 
- 
  println(p1) 
 
- 
  val out = new ObjectOutputStream(new FileOutputStream("src\\Person.txt")) 
 
- 
  out.writeObject(p1) 
 
- 
  out.close() 
 
- 
  val in = new ObjectInputStream(new FileInputStream("src\\Person.txt")) 
 
- 
  val p = in.readObject().asInstanceOf[Person] 
 
- 
  println(p) 
 
- 
} 
 
运行结果:
My name is JackChen and my friends name is Jhon·D,Sunday, 
My name is JackChen and my friends name is Jhon·D,Sunday,
 
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。
 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
 
Scala学习(九)练习
标签:
原文地址:http://www.cnblogs.com/sunddenly/p/4444626.html