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安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
 
随机推荐
- css布局-响应式布局
			
响应式设计 .在不同设备上正常使用 .一般主要处理屏幕大小问题 .主要方法: .隐藏 + 折行 + 自适应空间 .rem/viewport/media query 第一个案例 <!DOCTYPE ...
 - 2018.9.28 典型for循环特殊理解及其二维数组的理解
			
如果for里面换成了函数结果会是怎么样呢?下面就来介绍一下 package praDemo; public class Test { public static boolean foo(char c) ...
 - maven项目发布到Tomcat丢失jar包
			
昨天看了一篇tomcat设置的文章,说要把第一个勾上,这样不需要更新到tomcat. 一启动tomcat就发现丢包.后来在网上看了许多文章,说要update maeven项目,然后你就会发现启动过程 ...
 - axis调用cxf的webservice注意事项
			
需要注意的是: 1.wsdl显示部分内容 <?xml version="1.0" ?> - <wsdl:definitions name="Archiv ...
 - 【luogu P2341 [HAOI2006]受欢迎的牛】 题解
			
题解报告:https://www.luogu.org/problemnew/show/P2341 我们把图中的强连通分量缩点,然后只有出度为0的牛是受欢迎的,这样如果出度为0的牛只有一个,说明受所有牛 ...
 - 【luogu P1004 方格取数】 题解
			
题目链接:https://www.luogu.org/problemnew/show/P1004 标准的DP,不明白为什么有普及+提高的难度 四维DP[i][j][k][l] 表示第一遍走到i,j格子 ...
 - 使用带有数组的 ng-bind
			
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
 - 使用带有字符串的data-ng-bind
			
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
 - 前端DOM知识点
			
DOM即文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.DOM把网页和脚本 ...
 - PHP | Uploading and reading of files and database  【PHP | 文件的上传和读取与数据库】
			
这是我自己的一个作业,用的是很基础的代码. 有错误的地方欢迎批评和指正! 这里最容易出错的地方在读取数据后向数据库表中插入数据是的数据格式! 文件上传的页面 uploading.php <htm ...