Scala_常用功能

一、If…Else…

  val x = 5
  val s = if (x > 0) 1 else -1 // s 类型为Int
  val m = if (x > 0) "positive" else -1 // s 类型为String和Int的公共超类型Any
  // 在Scala中,每个表达式都应该有某种值。 如果else部分缺失了,以下语句相当于:if (x > 0) 1 else () ,这会返回一个空值。()表示Unit类
  if (x > 0) 1

二、循环:While、For

① While循环:Scala中没有break或continue语句,当需要使用break功能时可以:使用Boolean型的控制变量、从嵌套函数当中return、使用Breaks对象的break方法

  var n = 0
  while (n < 10) {
    println(n)
    n += 1
  }

② For循环:for (i <- 表达式),让变量i遍历 <- 右边的表达式的所有值。

  for (i <- 1 to 10) {
    println(i)    // 1 2 3 4 5 6 7 8 9 10
  }
  for (i <- 1 until 10) {
    println(i)    // 1 2 3 4 5 6 7 8 9
  }

③ 高级for循环:以 ‘变量 <- 表达式’ 的形式提供多个生成器,用分号将它们隔开

  for (i <- 1 to 3; j <- 1 to 3) print ((10 * i +j) + " ")   // 11 12 13 21 22 23 31 32 33

  // 每个生成器都可以带一个守卫,以if开头的Boolean表达式
  for (i <- 1 to 3; j <- 1 to 3 if i != j) print ((10 * i + j) + " ")  // 12 13 21 23 31 32

  // 引入可以在循环中使用的变量
  for (i <- 1 to 3; from = 4 - i; j <- from to 3) print ((10 * i + j) + " ")  // 13 22 23 31 32 33

  // 如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值
  // for推导式。生成的集合与它的第一个生成器是类型兼容的。
  val v = for (i <- 1 to 10) yield i%3
  println(v)   // Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

三、异常:Exception
throw表达式有特殊的类型Nothing这在if/else表达式中很有用。如果一个分支的类型是Nothing,那么if/else表达式的类型就是另一个分支的类型

  val q:Int = 10
  if (q >= 0) {sqrt(q)} else throw new IllegalArgumentException("x should not be negative")
  // 第一个分支类型是Double,第二个分支类型是Nothing。 因此,if/else表达式的类型是Double

四、Lazy
当val被声明为lazy时,它的初始化将被推迟,直到我们首次对它取值。

  lazy val words= scala.io.Source.fromFile("words.txt") .mkString
  // 读取文件并将内容拼接成一个字符串。由于是lazy类型,因此,如果程序中没有用到words,那么文件不会被读取

五、正则
要构造一个Regex对象, 用String类的r方法即可
如果正则表达式包含反斜杠或引号的话, 那么最好使用原始字符串语法:”“” “”“

  val numPattern = "[0-9]+".r
  val wsnumwsPattern = """\s+[0-9]+\s""".r
    // findAllIn方法返回遍历所有匹配项的迭代器。可以在for循环中使用它
  for (matchString <- numPattern.findAllIn("lib\\idea_rt.jar=8077:G:\\ideaIU\\IntelliJ IDEA 2017.1.4\\b" +
    "in\" -Dfile.encoding=UTF-8 -classpath D:\\Java\\jre\\lib\\chars")) println(matchString)
    // 要找到字符串中的首个匹配项, 可使用findFirstIn
  val x = numPattern.findFirstIn("lib\\idea_rt.jar=8077:G:\\ideaIU\\IntelliJ IDEA 2017.1.4\\b" +
    "in\" -Dfile.encoding=UTF-8 -classpath D:\\Java\\jre\\lib\\chars")
  println(x.mkString)   // 8077
    // 耍检查是否某个字符串的开始部分能匹配, 可用findPrefixOf
  val y = numPattern.findPrefixOf("lib\\idea_rt.jar=8077:G:\\ideaIU\\IntelliJ IDEA 2017.1.4\\b" +
    "in\" -Dfile.encoding=UTF-8 -classpath D:\\Java\\jre\\lib\\chars")
  println(y)   // None
    // 可以替换首个匹配项,或全部匹配项
  numPattern.replaceFirstIn("lib\\idea_rt.jar=8077:G:\\ideaIU\\IntelliJ IDEA 2017.1.4\\b", "23")
    //正则表达式组
  val numitemPattern = "([0-9] +)([a-z] +)".r
  val numitemPattern(num, item) = "99 bottles"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值