Scala学习记录——2.Scala的数据

1.处理数据的类型划分

  • 字面量(literal):直接出现在源代码中的数据,如数字5,字母’A’,文本"hello world"
  • 值(value):是一个不可变的、有类型的存储单元
  • 变量(variable):是一个可变的、有类型的存储单元
  • 类型(type):是所处理数据的种类(kind),这是对数据的一个定义或分类

在scala中,如果某些值和变量不再使用,将由Java虚拟机的垃圾回收系统自动撤销其中存储的数据。不能手动地撤销值和变量

2.处理数据的语法

  • 定义值(不可变)的语法:val <name>:<type> = <literal>

在这里插入图片描述

​ 使用这个值:

在这里插入图片描述

类型推导:在定义值时,可以不显示指定类型,这样scala编译器将从赋值判断这个值的类型(例如20——Int,’@’——Char,“Hello,world”——String )

  • 定义变量(可变)的语法:var <name>:<type> = <literal>

在这里插入图片描述

相对来说,值的使用场景要大于变量:

  • 值:主要适用于大部分场景(在并发或者多线程访问时,不可变的值会更加稳定)。
  • 变量:主要适用于存储临时数据或者在循环中累加值的局部变量。

3.命名

  • 一个字母后跟有0个或多个字母和数字
  • 一个字母后跟有0个或多个字母和数字,然后是一个下划线(_),后面是一个或多个字母和数字,或者一个或多个操作符字符
  • 一个或多个操作符字符
  • 一个或多个除反引号外的任意字符,所有这些字符要包围在一对反引号中

4.类型

Scala包括数值类型(例如Int和Double)和非数值类型(例如String),可以用来定义值和变量

类型名描述大小
Byte有符号整数1字节
Short有符号整数2字节
Int有符号整数4字节
Long有符号整数8字节
Float有符号浮点数4字节
Double有符号浮点数8字节

Scala支持根据类型等级自动将数字从一种类型转换到另一种类型,如下所示:
在这里插入图片描述

此为向上转换(即自动转换到更高等级)。

Scala不允许从较高等级类型自动转换到较低等级类型,不然会受到存储空间的影响,丢失数据。

但是,可以选择使用toType方法手动完成类型间的转换,所有数值类型都有这样一个方法,如下所示:
在这里插入图片描述

除了使用显式类型,还有一种方法是使用Scala的字面量类型记法,直接指定字面量数据的类型:

字面量类型概述
5Int默认为无修饰(前缀或后缀)的整数字面量是Int类型
0x0fInt"0x"前缀指示十六进制记法
5lLong“l”后缀表示Long类型
5.0Double默认为无修饰(前缀或后缀)的小数字面量是Double类型
5fFloat"f"后缀指示Float类型
5dDouble"d"后缀指示Double类型

Scala的字面量类型中可以使用小写或大写字符,例如字面量数字5l与字面量数字5L是相同的。

5.字符串

Scala的String建立在Java的String基础上,另外增加了多行字面量和字符串内插等特有的特性。

在这里插入图片描述
与数值类型类似,String类型也支持使用数学运算符,例如:

在这里插入图片描述

可以用三重引号创建多行String,例如:

在这里插入图片描述
另外,如果要根据其他值建立一个String,利用字符串相加就很容易做到,例如:

在这里插入图片描述

字符串内插:要在一个String中加入值或变量,更直接的一种方法是利用字符串内插(string interpolation),这是一种特殊的模式,采用这种模式可以识别和解析外部值和变量名。

Scala的字符串内插记法是在字符串的第一个双引号前面增加一个"s"前缀,然后可以使用美元符($)指示外部数据的引用(可以有可选的大括号),如下所示:

在这里插入图片描述

如果引用中有非字(nonword)字符(如算式),或者如果引用与周围文本无法区分,就需要使用可选的大括号,如下所示:

在这里插入图片描述
printf记法:字符串内插的替代格式是使用printf记法,想要控制数据格式化时,如字符个数或小数值的显示,这种记法非常有用。要使用printf记法,需要把前缀改为"f",然后将printf记法紧跟在引用后面;
在这里插入图片描述

6.正则表达式

正则表达式是字符和标点符号组成的一个字符串,表示一个搜索模式。

Scala正则表达式的格式基于Java类java.util.regex.Pattern,String类型提供了很多支持正则表达式的内置操作,如下所示:

操作名描述
matches如果正则表达式与整个字符串匹配,返回true
replaceAll用替换文本取代所有匹配文本
replaceFirst用替换文本取代第一个匹配文本

利用捕获组,可以选择一个给定字符串中的项,根据正则表达式将它们转换为本地址。这个模式必须至少包括一个捕获组,由小括号定义,输入则至少包括一个被捕获模式来返回相应的值

语法:

val <Regex value>(<identifier>) = <input string>

在这里插入图片描述

7.Scala类型概述

img

图中的空心三角箭头表示超类型,图下方带多个箭头的类型指示它们是这个系统中所有类型(包括你自己定义的类)的子类型

类型名描述可否实例化
AnyScala中所有类型的根
AnyVal所有值类型的根
AnyRef所有引用(非值)的根
Nothing所有类型的子类
Null所有指示null值的AnyRef类型的子类
CharUnicode字符
Booleantrue或false
String字符串(即文本)
Unit指示没有值

常用类型操作:

操作名描述
asInstanceOf[]将一个值转换为指定类型的值。如果这个值与新类型不兼容,会导致一个错误
getClass返回一个值的类型(即类)
isInstanceOf[]如果这个值有给定的类型,则返回true
hashCode返回这个值的散列码,这对于基于散列的集合很有用
to转换函数,可以将一个值转换为另一个兼容的值
toString将值显示为一个字符串

注意:尽量使用to而不要使用asInstanceOf,因为如果值无法转换为所请求的类型,asInstanceOf操作就会导致一个错误

8.元组

元组是一个包含两个或多个值的有序容器,所有这些值可以有不同的类型。如果需要对值逻辑分组,将它们表示为一个统一的单位,元组就很有用。不过,元组的作用仅限于作为多个值的容器

创建元组时,值之间要用逗号分隔,并用一对小括号包围。

语法:

(<value 1>,<value 2>[,<value 3>…])

可以通过元素的索引(从1开始)访问元组中的单个元素,如下所示:

在这里插入图片描述

也可以使用关系操作符(->)来创建元组,如下所示:

在这里插入图片描述

元组提供了一种建立数据结构的通用方法,如果要对离散的元素进行分组以便处理,元组会很有用

9.练习

  1. 编写一个新的摄氏度到华氏度转换的程序,把每一步转换的结果保存在单独的值中

在这里插入图片描述

  1. 使用输入值2.755,生成字符串“You owe $2.76”

在这里插入图片描述

  1. 将数字128转换为一个Char、String、Double,再转换为Int

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赈川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值