@amoszhou
2014-05-13T07:25:26.000000Z
字数 1840
阅读 1452
scala
要读取文件中所有的行,可以用scala.io.Source的getLines()。
import scala.io.Sourceobject FileReader extends App{val source = Source.fromFile("D:/modify.sql")val ite = source.getLines()for (line <- ite ) {println(line)}source.close()}
有时候我们想直接将一个文件读取成一个字符串,进行处理。那么更简,直接用source.mkString,返回的就是一个String。
要从文件中读取单个字符,你可以直接把Source对象当做迭代器,Source是扩展至Iterator[Char]
for ( c <- source) {//处理c,c就是一个Char}
如果只想查看某个字符,又不处理它的话。可以掉用source.buffered,然后用head取值
val source = Source.fromFile("D:/modify.sql")val iter = source.bufferedwhile(iter.hasNext){if( iter.head == 'u'){//doSomething}}
当然,如果文件不是很大,你直接整个文件读成String进行处理更方便。
处理方式还是一样,只是构建Source对象的不一样了。
val source = Source.fromURL("http://www.baidu.com", "UTF-8")val source2 = Source.fromString("Hello world") //主要用于调试val source3 = Source.stdin
scala目前没有提供这样的方法,所以只能用java实现。
val file = new File(filename)val in = new FileInputStream(file)val bytes = new Array[Byte](file.length.toInt)in.read(bytes)in.close()
同样scala也没有提供方法,所以也只能用Java来完成
@SerialVersionUID(42L) class Person exnteds Serializable{}
如果能接受缺少的UID,连前面的注解都可以省掉。序列化与反序列化还是要用java的ObjectOutputStrean
正则表达式的语法基本上都是一样的。主要是有几个构建方法问题:
首先,要构建一个Regex对象,可以用String的.r方法:
val reg = """\s+[0-9]+\s+""".rfor(matchString <- reg.findAllIn("99 foo, 98 bar")){//处理....}
有一个比较爽的东西就是“原始字符串”,即""".."""这样。就可以避免掉Java里面的转义。这样的字符串,你的值是怎么样就是怎么样。再也不用去纠结于转义符用的对不对了。
findAllIn返回的是一个迭代器。也可以将迭代器转换成数组。调用toArray
如果要找到首个匹配项,可以用findFirstIn。得到的结果是一个Option[String]。类似的方法还有,检查某个字符串开始部分能否匹配findPrefixOf。
用于替换的方法,则对应有replaceFirstIn,replaceAllIn.
直接用()括起来
val numItemPattern = "([0-9]+) ([a-z]+)".rval numItemPattern(num,item) = "99 foo"println("num:" + num)println("item:" + item)
会打印出:99 foo
如果想要从多个匹配项中提取内容,就用for。
val numItemPattern = "([0-9]+) ([a-z]+)".rval numItemPattern(num,item) = "99 foo"println("num:" + num)println("item:" + item)for(numItemPattern(num,item) <- numItemPattern.findAllIn("99 foo, 98 bar")){println("num:" + num)println("item:" + item)}