Scala语言 学习记录(二)

1、字符串

关键字:

  • package import class obejct trait extends with type for

  • private protected abstract sealed final implicit lazy override

  • try catch finlly throw

  • if else match case do while for return yield

  • def var val

  • this super

  • new

  • true false null

  • 其中Java没有的关键字:object trait with implicit match yield def val var

字符串:

  • 类型:String

  • +号连接

  • *字符串乘法,复制一个字符串多次

  • printf格式化输出

  • 字符串插值:s"xxx${varname}"前缀s模板字符串,前缀f格式化模板字符串,通过$获取变量值,%后跟格式化字符串。

  • 原始字符串:raw"rawstringcontents${var}",不会考虑后跟的格式化字符串。

  • 多行字符串:""" """

  • 输出:print printf println ...

package com.demo2

/**
 * @author June
 * @date 2022/1/25 9:12
 */
object Test4 {
  def main(args: Array[String]): Unit = {
    //字符串输出
    //字符串的拼接、println()用法:通过:赋值
    //字符串拼接:通过+链接
    val name = "alice"
    val age = 33
    println(age+"岁的"+name+"在学习")
    //*用于将一个字符串复制多次拼接
    println(name*2)
    //println():字符串。通过%传值
    printf("%d岁的%s在学习",age,name)
    println()
    //字符串的差值(模板)(差值字符串)通过$获取变量值
    println(s"${age}岁的${name}在学习")
    val num: Float = 2.33333445f
    println(s"The num is ${num}")         //格式化模板字符串s
    val nums: Double = 333232.33333445
    println(f"The num is ${nums}%.2f")    //格式化模板字符串f
    println(raw"The num is ${nums}%.2f")  //格式化模板字符串raw
    //三引号表示字符串、保持多行字符串的原格式输出
    val sql=s"""
       |select *
       |from
       |  student
       |where
       |  name = ${name}
       |and
       |  age > ${age}
       |""".stripMargin
    println(sql)
  }
}

测试结果:

 

2、输入

输入:

  • StdIn.readLine()

  • StdIn.readShort() StdIn.readDouble

  • import scala.io.StdIn

package com.demo2

import scala.io.StdIn

/**
 * @author June
 * @date 2022/1/25 9:35
 */
object Test5 {
  def main(args: Array[String]): Unit = {
    //信息地输入
    println("请输入您的大名:")
    val name = StdIn.readLine()
    println("请输入您的年龄:")
    val age = StdIn.readInt()
    //控制台的打印输出
    println(s"欢迎${age}岁的${name}")

  }
}

测试结果:

 

3、读取文件

package com.demo2

import java.io.{File, PrintWriter}

import scala.io.Source

/**
 * @author June
 * @date 2022/1/25 9:40
 */
object Test6 {
  def main(args: Array[String]): Unit = {
    //从文件种读取数据
    Source.fromFile("src/main/resources/test.txt").foreach(print)

    //将数据写入文件
    val writer = new PrintWriter(new File("src/main/resources/output1.txt"))

    writer.write("hello scala from ni")
    //关闭输出流
    writer.close()

    Source.fromFile("src/main/resources/output1.txt").foreach(print)

  }
}

测试结果:

  

 

4、数据类型

数据类型:

  • java基本类型char byte short int long float double boolean

  • java基本类型对应包装类型:Charater Byte Short Integer Long Float Double Boolean

  • java中不是纯粹的面向对象。

  • Scala吸取了这一点,所有数据都是对象,都是Any的子类。

  • Any有两个子类:AnyVal值类型 AnyRef引用类型。

  • 数值类型都是AnyVal子类,和Java数值包装类型都一样,只有整数在scala中是Int、字符是Char有点区别。

  • StringOps是java中String类增强,AnyVal子类。

  • Unit对应java中的voidAnyVal子类。用于方法返回值的位置,表示方法无返回值,Unit是一个类型,只有一个单例的对象,转成字符串打印出来为()

  • Void不是数据类型,只是一个关键字。

  • Null是一个类型,只有一个单例对象null就是空引用,所有引用类型AnyRef的子类,这个类型主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。

  • Nothing所有类型的子类型,也称为底部类型。它常见的用途是发出终止信号,例如抛出异常、程序退出或无限循环。

整数类型:都是有符号整数,标准补码表示。

  • Byte 1字节

  • Short 2字节

  • Int 4字节

  • Long 8字节

  • 整数赋初值超出表示范围报错。

  • 自动类型推断,整数字面值默认类型Int,长整型字面值必须加L后缀表示。

  • 直接向下转换会失败,需要使用强制类型转换,(a + 10).toByte

浮点类型:

  • Float IEEE 754 32位浮点数

  • Double IEEE 754 64位浮点数

  • 字面值默认Double

字符类型:

  • 同java的Character,2字节,UTF-16编码的字符。

  • 字符常量:''

  • 类型Char

  • 转义:\t \n \r \\ \" \'etc

布尔类型:true false

空类型:

  • Unit 无值,只有一个实例,用于函数返回值。

  • Null 只有一个实例null,空引用。

  • Nothing 确定没有正常的返回值,可以用Nothing来指定返回值类型。

package com.demo2

/**
 * @author June
 * @date 2022/1/25 10:10
 */
object Test7 {
  def main(args: Array[String]): Unit = {
    val a1: Byte = 127
    //错误定义:Byte 值范围 -128~127
    //val a2: Byte = 128
    val a2: Byte = -128
    //定义变量默认为整型
    val a3 = 12   //默认Int
    val a4: Long = 123444322222L    //长整型数值定义
    //错误定义
    val b1: Byte = 10
    val b2: Byte = (3+29)
    println(b2)

    val b3: Byte = (b1+33).toByte
    println(b3)

    //浮点类型
    val f1: Float = 1.2243f
    val d1:Double = 3.223

    //字符类型
    val c1: Char = 'a'
    println(c1)

    val c2: Char = '9'
    println(c2)
    //特殊字符
    val c3: Char = '\t'     //制表符
    val c4: Char = '\n'     //换行符
    println("abc" + c3 + "def")
    println("abc" + c4 + "def")

    //转义字符
    val c5 = '\\'         //表示\
    val c6 = '\"'         //表示"
    println("abc" + c5 + "def")
    println("abc" + c6 + "def")

    val i1: Int = c1
    println("i1:" + i1)
    val i2: Int = c2
    println("i2:" + i2)

    val c7: Char = (i1+1).toChar
    println(c7)
    val c8: Char = (i2-1).toChar
    println(c8)

  }
}

测试结果:

  

 

posted @ 2022-01-25 11:11  往心。  阅读(48)  评论(0编辑  收藏  举报