第一版

test-scala.sh文件内容如下:

#!/bin/sh
exec scala "$0" "$@"
!# println("Hello, Welcome to https://www.iteblog.com!") args.foreach(println) import scala.io.Source
if(args.length>0){
for(line<-Source.fromFile(args(0)).getLines)
println(line.length+" "+line)
}else{
Console.err.println("Please enter FileName")
}

运行上述代码(命令:sh test-scala.sh test-scala.sh),输出形式如下:

从上图可以看出,行首的字符数影响了代码排版

第二版 - 固定行首字符数所占的宽度

预期得到如下效果图:

思路:

1)定义widthOfLength方法用于计算行宽

2)找到最长的一行

3)将该行字符串传给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
var maxWidth=0
for(line<-lines)
maxWidth=maxWidth.max(widthOfLength(line))
for(line<-lines){
val numSpaces=maxWidth-widthOfLength(line)
val padding=" "*numSpaces
println(padding+line.length+"|"+line)
}
}else{
Console.err.println("Please enter FileName")
}

第三版

Scale属于 OOP 与 FP 混合的编程语言,在函数式编程中不推荐使用var

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
println(padding+line.length+"|"+line)
}
}else{
Console.err.println("Please enter FileName")
}
 

Scala学习笔记(四):从文件里读取文本行的更多相关文章

  1. Python学习笔记之从文件中读取数据

    10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...

  2. 【linux学习笔记四】文件搜索命令

    一 文件搜索 locate //在后台数据库中按文件名搜索 搜索速度更快 locate 文件名 //locate命令所搜索的后台数据库 /var/lib/mlocate //更新数据库 updated ...

  3. scala 学习笔记四 匿名函数

    1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...

  4. [Scala]Scala学习笔记四 类

    1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...

  5. Scala学习笔记——入门

    0.在 scala> 下运行Scala程序 首先cd到.scala文件所在的目录下 scalac这个scala文件,然后import package的名字.object的名字 然后就能使用 ob ...

  6. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  7. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  8. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  9. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

随机推荐

  1. gluon实现softmax分类FashionMNIST

    from mxnet import gluon,init from mxnet.gluon import loss as gloss,nn from mxnet.gluon import data a ...

  2. 对枚举数据类型使用switch

  3. Yii2获取当前程序执行的sql语句

    1.Yii2获取当前程序执行的sql语句: $query = model::find();         $dataProvider = new ActiveDataProvider([       ...

  4. vue watch数组或者对象

    1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console. ...

  5. 简述 private、 protected、 public、 internal 修饰符的访问权限

    简述 private. protected. public. internal 修饰符的访问权限. private : 私有成员, 在该类的内部才可以访问. protected : 保护成员,该类内部 ...

  6. LeetCode14.最长公共前缀 JavaScript

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  7. css的基础用法(上)

    css定义: CSS层叠式样表(Cascading  Style Sheets)是一种用来表现html或xml等文件样式的计算机语言.CSS不仅可以静态的修饰网页,还可以配合各种脚本语言动态地对网页个 ...

  8. Java虚拟机垃圾回收:基础点(转载)

    1.Java虚拟机垃圾回收 垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据. 在1960年诞生于MIT的Lisp语言首次使用了动态内存分配和垃 ...

  9. 删除Navicat在注册表信息

    @echo offecho 正在删除navicat注册表REG DELETE HKEY_CURRENT_USER\Software\PremiumSoft\Data /fREG DELETE HKEY ...

  10. 于是他错误的点名开始了(trie树)

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...