scala学习笔记(8)文件和正则表达式
1.读取行
----------------------------------------
要读取文件中所有的行,可以调用scala.io.Source对象的getLine方法:
import scala.io.Source val source =Source.fromFile("myfile.txt","UTF-8")//第一个参数可以是字符串或者java.io.File val lineIterator = source.getLines
结果是一个迭代器,可以用其来逐条处理行
for(1<- lineIterator) 处理1
或者可以对其迭代器应用toArray或者toBuffer方法,将这些放到数组或者数组缓冲中去:val lines = source.getLines.toArray
val contents = source.mkString //将整个文件读取成为字符串
2.读取字符
-----------------------------------
要从文件中读取单个字符,可以直接把source当做迭代器,因为source 扩展自Iterator[Char]
for(c <- source) 处理c
如果想查看某个字符单数又不处理的话,调用souce对象的buffered方法,这样可以用head方法查看一下字符,但是同时并不把其当做已经处理的字符集
val source = Source.fromFile("myfile.txt","UTF-8")
val iter = source.buffered
while(iter.hasNext){
if(iter.head 是符合预期的)
处理iter.next
else
..........
}
source.close()
import scala.io.Source;
Source.fromFile("e:/hello.txt").mkString //将其转换成字符串
3.读取此法单元和数字
-------------------------------------
val tokens =source.mkString.split("//S+") //很快的读取源文件中所有以空格隔开的词法单元
将字符转转换成为数字,可以用toInt或者toDouble方法。
val numbers = for(w <- tokens) yield w.toDouble
//或者
val numbers = tokens.map(_.toDouble) //记住,你总是可以使用java.util.Scanner类来处理同时包含文本和数字的文件
//从控制台读取数据
print("How old are you ") //在缺省的情况下系统会自动的使用Consle,因此不需要对print和readInt使用限定词 val age = readInt() //或者使用readDoubel或者readLong
//通过正则表达式
import scala.io.Source; /** * Created by stone on 2018/9/17. */ object FileDemo { def main(args: Array[String]): Unit = { val s = Source.fromFile("E:\\hello.txt","gb2312"); val lines = s.getLines; //进行迭代 for(line <- lines){ println(line); } val str = Source.fromFile("E:\\hello.txt","gb2312").mkString; val it = str.split("\\s+"); for(i<-it){ println(i); } } }
正则表达式
----------------------------------
(1)href正则表达式
Pattern p =Pattern.compile("<a\\s*href=\"([\u0000-\uffff&&[^u005c\u0022]]*)\""); Matcher m = p.matcher(str); while(m.find()){ String s = m.group(); System.out.println(s); }