Scala学习笔记(四):从文件里读取文本行
第一版
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学习笔记(四):从文件里读取文本行的更多相关文章
- Python学习笔记之从文件中读取数据
10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...
- 【linux学习笔记四】文件搜索命令
一 文件搜索 locate //在后台数据库中按文件名搜索 搜索速度更快 locate 文件名 //locate命令所搜索的后台数据库 /var/lib/mlocate //更新数据库 updated ...
- scala 学习笔记四 匿名函数
1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...
- [Scala]Scala学习笔记四 类
1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...
- Scala学习笔记——入门
0.在 scala> 下运行Scala程序 首先cd到.scala文件所在的目录下 scalac这个scala文件,然后import package的名字.object的名字 然后就能使用 ob ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
随机推荐
- html嵌套关系
哪些元素可以出现在什么地方,哪一个元素可以被包涵在另一个元素里面,这个都是有规则的 1.块级元素可以包涵行内元素 2.块级元素不一定包涵块级元素 p包涵div是不合法的,在浏览器里面会自动在p里面 ...
- 【转】jQuery源码分析-03构造jQuery对象-源码结构和核心函数
作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 毕竟是边读边写,不对的地方请告诉我,多多交流共同进步.本章还未写完,完了会提交PDF. 前记: 想系 ...
- 2018.10.17 学习如何使用Shiro
参考学习https://www.javazhiyin.com/19502.html
- 如何解决mosh中翻页只能查看一屏的问题
最近用mosh替换了ssh作为连接开发机的工具,发现另外一个问题,ls cat随便什么命令输出结果超过一行的,向上翻页就没有了,找了下官网的FAQ也提到了这个问题,目前解决方案是使用tmux或者scr ...
- 8.Element-ui日期组件上传到后台日期少一天解决办法
<el-date-picker type="date" value-format="yyyy-MM-dd" placeholder="转出日期& ...
- 上传文件,经过Zuul,中文文件名乱码解决办法
转载请标明出处: http://blog.csdn.net/forezp/article/details/77170470 本文出自方志朋的博客 问题描述 在项目中又一个上传文件的oss服务,直接调用 ...
- SpringBoot非官方教程 | 第六篇:springboot整合mybatis
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-mybatis/ 本文出自方志朋的博客 本文主要 ...
- 使用 form 和 iframe 实现图片上传回显
主要利用 form 的 target 属性,在提交表单之后 response 返回到 iframe 中 form 的 action 可以自己写,也可以直接利用 富文本编辑器的接口实现上传 <fo ...
- 精干货! Java 后端程序员 1 年工作经验总结
一.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少 东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护 和发布当救火队员的苦恼 ...
- jQuery(四)--HTTP请求
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...