scala学习笔记

文件和正则表达式

文件读取
首先,要导入 scala.io.Source 包
通常的读取方法

val source = Source.fromFile("myfile.txt","UTF-8")
val lineIterator = source.getLines//getLines方法返回的是一个迭代器

处理方法:

for(i <- lineIterator) 处理 i

我们可以将得到的文本用mkString方法读取成一个字符串

val source = Source.fromFile("myfile.txt","UTF-8").mkString

在java中我们通常这样来做:

//省略读取操作
String[] str = s.spilt("\\s+");

将读取到的s有空格的文本通过split函数分开形成一个字符串数组,然后分别处理每个字符串。
scala中这样来做:

val source = Source.fromFile("myfile.txt","UTF-8").mkString.spilt("\\s+")

然后我们可以把每个字符串转用toInt和toDouble方法转化成所需要的来处理。
从URL或其他源读取

val source = Source.fromURL("www.baidu.com")
//从给定字符串读取
val source = Source.fromString("hello","world")

写入文件
再写文件时我们用到了 java.io 包
通常处理方法:

import java.io_
val writer = new PrintWriter("xxx.txt")

在写入时,用到print/println方法可以写入包括浮点数,整数,字符串在内的多种数据类型。

writer.print("")

scala强大在代码的简洁,可以用很少的代码实现复杂的功能。
比如:把字符数大于4的单词打印到控制台
scala:

Source.fromFile("haha.txt").mkString.split("\\s+") foreach(x => if(x.length > 4) println(x))

java

BufferedReader bReader;
        try {
            bReader = new BufferedReader(new FileReader("xxx.txt"));
            String string = bReader.readLine();
            while (string != null) {
                String[] str = string.split(",");
                for(int i = 0;i < str.length();i++){
                    if(str(i) > 4)
                        System.out.println(str(i));
                }

                string = bReader.readLine();
            }
            bReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

以上代码我个人版本,可能还有比较简单的,scala只用1行就可以达到,确实非常简洁。
访问目录
比如:处理目录中的所有文件

import java.io.File
 def subdirs(dir : File) : Iterator[File] = {
    //listFiles().filter 返回一个抽象路径名数组,这些路径名表示此抽象路径名中满足指定过滤器的文件
    val children = dir.listFiles().filter(_.isDirectory)
    //递归,收集每个文件夹中的子文件
children.toIterator ++ children.toIterator.flatMap(subduers _)
  }
  //递归遍历得到所有文件的一个集合
  for(d <- subdirs(dir)) 处理 d

正则表达式
scala中构造一个Regex对象,用String类中的r方法
比如:

val numPattern = "[0-9]+".r
//和下面的表达式意思相同
val numPattern = "\d+".r //+代表不止一个数字

正则表达式多用来进行模式匹配,和findAllIn方法结合找到匹配项,返回值为一个迭代器。
比如

for(matchString <- numPattern.findAllIn("99 bottles,98bottles"))
处理 matchString

或者也可以转化为数组:

numPattern.findAllIn("99 bottles,98bottles").toArray

正则表达式组
通常情况下一个正则表达式并不能满足所要达到的需求,这种情况下需要用到表达式组。通常以一个圆括号为一个组:

val numitemPattern = "([0-9]+) ([a-z]+)".r

对这部分感兴趣的同学下来可以看看正则表达式的语法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值