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&&[^u005cu0022]]*)"");

  Matcher m = p.matcher(str);

  while(m.find()){

    String s = m.group();
    System.out.println(s);
}

  

原文地址:https://www.cnblogs.com/bigdata-stone/p/9665155.html