Scala--文件和正则表达式
一、读取行
import scala.io.Source
val source = Source.fromFile("D:\\documents\\Scala\\MyDemo\\t.txt", "UTF-8")
val lineIterator = source.getLines() //获取文件行的迭代器
for(l <- lineIterator){
println(l)
}
val array = source.getLines().toArray //把行放到Array中
for(l <- array){
println(l)
}
val context = source.mkString //把整个文件读取成一个字符串
println(context)
source.close()
读取文件这里不能重复读取,只显示一遍文本内容
111111111
22222222222222222
3333333333
二、读取字符
import scala.io.Source
val source = Source.fromFile("D:\\documents\\Scala\\MyDemo\\t.txt","UTF-8")
for(c <- source){ //一个字符一个字符迭代 Source扩展自 Iterator[Char]
print(c)
}
val iter = source.buffered //使用bufferd方法,用head获取字符
while(iter.hasNext){
if(iter.head == 'a'){
iter.next()
iter.next()
print(iter.head)
}
else{
iter.next()
}
}
三、读取词法单元和数字
import scala.io.Source
val source = Source.fromFile("D:\\sxt\\documents\\Scala\\MyDemo\\num.txt", "gbk")
val lines = source.getLines() //以行读取 for(l<- lines){
val tokens = l.split("\\s+") //将每行数据以空格隔开
for(i<- tokens){
print(i+",")
}; println() val numbers = tokens.map(_.toDouble) //将分割的字符串转换成double类型
for(n<- numbers){
print(n+"|")
}; println() val numbers1 = for(n<- tokens) yield n.toDouble //将分割的字符串转换成double类型
for(n <- numbers1){
print(n+"-")
}; println() }
四、从URL或其他源读取
import scala.io.Source
val source1 = Source.fromURL("http://www.baidu.com","UTF-8")
println(source1)
val source2 = Source.fromString("Hello World")
println(source2.mkString)
val source3 = Source.stdin
println(source3.mkString)
五、读取二进制文件
Scala没有读取二进制文件的方法,需要使用Java类库,
import java.io.File
val file = new File("D:\\\\sxt\\\\documents\\\\Scala\\\\MyDemo\\\\t.txt")
val in = new FileInputStream(file)
val bytes = new Array[Byte](file.length.toInt) in.read(bytes) for(i <- 0 until bytes.length) print(bytes(i)) in.close()
结果:
文件内容:abcd
输出结果:979899100
六、写入文本文件
val value = 100
val out = new PrintWriter("t1.txt")
for(i <- 0 to 100) out.println(i)
out.printf("%d ", value.asInstanceOf[AnyRef]) //格式化输出需要转换成 AnyRef
out.print("%d".format(value)) //通过String的format的方法完成格式化输出
out.close()
结果:
在项目工程目录下,生成t1.txt文件
七、访问目录
八、序列化
九、进程控制
十、正则表达式
val numPattern = "[0-9]+".r //通过 String的 r方法
val wsnumwsPattern = """\s+[0-9]+\s+""".r //"""...""" 原始字符串可包含反斜线或引号,不需要转义 "\\s+[0-9]+\\s+"
for(matchString <- numPattern.findAllIn("99 apples, 87 bottles")) println(matchString) //findAllIn返回所有匹配项的迭代器
val matches = numPattern.findAllIn("99 apples, 87 bottles").toArray //转换成数组
for(m<- matches) println(m)
val m1: Option[String] = wsnumwsPattern.findFirstIn("99 apples, 87 bottles") //获得第一个匹配项
println(m1)
val mp = numPattern.findPrefixOf("99 apples, 87 bottles") //获取开始部分匹配的
println(mp)
val wsmp = wsnumwsPattern.findPrefixOf("99 apples, 87 bottles") //获取开始部分匹配
println(wsmp)
val rm = numPattern.replaceAllIn("99 apples, 87 bottles","xx") //替换所有匹配的项
println(rm)
val rmf = numPattern.replaceFirstIn("99 apples, 87 bottles","xx") //替换第一个匹配的项
println(rmf)
结果:
Some( )
Some()
None
xx apples, xx bottles
xx apples, bottles
十一、正则表达式组
val numitemPattern = "([0-9]+) ([a-z]+)".r //通过()区分开,多个子表达式 val numitemPattern(num, item) = "99 apples" //单个匹配
println(num,item) for(numitemPattern(num, item)<- numitemPattern.findAllIn("99 apples, 87 bottles")){//多个匹配项提取分组内容
println(num,item)
}
结果
(99,apples)
(99,apples)
(87,bottles)
参考《快学Scala》
Scala--文件和正则表达式的更多相关文章
- Scala学习(九)---文件和正则表达式
文件和正则表达式 摘要: 在本篇中,你将学习如何执行常用的文件处理任务,比如从文件中读取所有行或单词,或者读取包含数字的文件等.本篇的要点包括: 1. Source.fromFile(...).get ...
- Scala学习笔记--正则表达式基础知识、如何在scala内使用
正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...
- scala文件通过本地命令运行
1.准备(检查) a.本地环境安装jdk b.安装scala 2.sublime编辑scala文件,并存放到F:\plan_next\scala_compile下 3.文件目录中切换到cmd中(文件目 ...
- 创建好maven项目以后发现无法创建scala文件
今天创建了一个maven项目 然后准备创建scala文件的时候发现没有Scala 然后只好上网上找方法了 下面是一种解决方法 1.点击file,选择settings 进去之后,选择build 进去 ...
- Scala学习九——文件和正则表达式
一.本章要点 Source.fromFile(...).getLines.toArray输出文件的所有行; Source.fromFile(...).mkString以字符串形式输出文件内容; 将字符 ...
- scala学习笔记(8)文件和正则表达式
1.读取行 ---------------------------------------- 要读取文件中所有的行,可以调用scala.io.Source对象的getLine方法: import sc ...
- 快学Scala-第九章 文件和正则表达式
知识点: 1.读取文件中的所有行,可以调用scala.io.Source对象的getLines方法: import scala.io.Source val source = Source.from(& ...
- Scala文件操作
Scala中的文件操作基本可以依赖于Java的实现,包括输入.输出流的使用. object FileOps {def main(args: Array[String]) { val file = So ...
- Python 入门学习(贰)文件/文件夹正则表达式批量重命名工具
基于 Udacity 的 Python 入门课程 Programming Foundations with Python 基于 Python 2.7 思路 Project 2 是一个去除文件名中所有数 ...
- 【std::regex】C++文件路径正则表达式
今天代码中遇到使用正则表达式匹配一个文件路径的问题,需要验证传入的文件路径是否合法,学习了简单的正则表达式的写法后,简单写了如下代码,在网上找了一些在线测试正则表达式的网站,测试可以通过. std:: ...
随机推荐
- JSP内置对象——response对象
看一个实例: 运行结果: 出现了一个很奇怪的现象,这个outer对象输出的字符串,跑到顶部去了.这个呢也就说明了response对象获得的writer对象的输出总是前于我们的内置对象.(respons ...
- 你用过这种奇葩的C#注释吗
博客园一位微软MVP的文章 http://www.cnblogs.com/asxinyu/p/4383402.html#autoid-0-0-0 摘录: 我这里说的奇葩,并不是脱离三种方式,而是其注释 ...
- JavaScript判断变量名是否存在数组中
直接上代码: JavaScript代码: var array=[{name:"张珊",sex:"男"}]; console.log(array); if(arr ...
- 单例模式实现 Volitile , interlocked
//单例模式: //1. 双检锁机制 Volatile.write() //2. 静态变量 //3. Interlocked.CompareExchange(ref single, temp, nul ...
- 通过HTTP参数污染绕过WAF拦截 (转)
上个星期我被邀请组队去参加一个由CSAW组织的CTF夺旗比赛.因为老婆孩子的缘故,我只能挑一个与Web漏洞利用相关的题目,名字叫做”HorceForce”.这道题价值300点.这道题大概的背景是,你拥 ...
- 转:SQL中 patindex函数的用法
语法格式:PATINDEX ( '%pattern%' , expression ) 返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算. pattern字符串在 ...
- Spark job 部署模式
Spark job 的部署有两种模式,Client && Cluster spark-submit .. --deploy-mode client | cluster [上传 Jar ...
- windows中VirtualBox调整扩大VMDK格式的磁盘空间
今日为了学习(zhuangX),在家中电脑上安装了VirtualBox的虚拟机,为了兼容性,选择了VMDK磁盘格式,想起办公室的电脑,在系统配置完成后,一直提示磁盘空间不足,尴尬了,重新装?环境啥的都 ...
- 如何使用EditPlus批量删除 带有某个字符的一行
比如以下五行,我要将带有英文字母a的一行全部批量删除1234551243243123aa244123123981232137aa 2013-04-11 19:32 提问者采纳 我这里是英文版, ...
- October 31st, 2017 Week 44th Tuesday
No matter how hard the past is, you can always begin again. 不管过去有多么困难,你都可以重新开始. Honestly, I don't ag ...