Scala学习笔记(四):从文件里读取文本行

本文讨论了使用Scala语言处理文件时遇到的内存溢出问题,并通过优化代码实现改进输出格式。主要内容包括文件读取、内存管理及输出格式调整。

第一个版本:

import scala.io.Source
if(args.length>0){
  for(line<-Source.fromFile(args(0)).getLines)
    print(line.length+" "+line)
}else{
  Console.err.println("Please enter FileName")
}

 

 

运行该程序时抛出了异常:java.lang.OutOfMemoryError:Java heap space

是因为文件过大?

错误原因暂时不管,可以参考文章:http://www.cnblogs.com/cyjch/archive/2012/04/10/2440421.html

 

=====================================================================================================

现想调整输出格式,得到如下格式:

=====================================================================================================

 

第二版:

import scala.io.Source
def widthOfLength(s:String)=s.length.toString.length
if(args.length>0){
  val lines=Source.fromFile(args(0)).getLines.toList
  var maxWidth=0
  for(line<-lines)
    maxWidth=maxWidth.max(widthOfLength(line))
  for(line<-lines){
    val numSpaces=maxWidth-widthOfLength(line)
    val padding=" "*numSpaces
    print(padding+line.length+"|"+line)
  }
}else{
  Console.err.println("Please enter FileName")
}

 

第三版:

不使用var来实现,首先找到最长的一行,之后将该行字符串传给widthOfLength计算最大宽度

import scala.io.Source
def widthOfLength(s:String)=s.length.toString.length
if(args.length>0){
  val lines=Source.fromFile(args(0)).getLines.toList
  val longestLine=lines.reduceLeft(
    (a,b)=>if(a.length>b.length) a else b
  )
  val maxWidth=widthOfLength(longestLine)
  for(line<-lines){
    val numSpaces=maxWidth-widthOfLength(line)
    val padding=" "*numSpaces
    print(padding+line.length+"|"+line)
  }
}else{
  Console.err.println("Please enter FileName")
}

 

转载于:https://www.cnblogs.com/studyLog-share/p/4732875.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值