本文主要对scala语言的基本数据类型,输入输出,控制结构进行介绍

基本数据类型

spark sql将字符串转换成浮点数类型 spark sql 字符串长度_大数据

其中String类型来自java.lang包,其余所有基本类型都来自scala包,例如,Int的全名就是scala.Int,但String的全名是java.lang.String。

  • String类方法
val s = "Hello"
// 获取字符串中的某个字符
// 选取字符串中的前n个字符
s.take(1) // 获取首字符
// 通过索引获取第n个字符
s(0) // 获取首字符
// take的反向版本
s.takeRight(1) // 获取最后一个字符
// 将字符串反转
s.reverse
// 获取字符串长度
s.length


字面量

字面量就是直接写在代码里的常量值,用val来定义

  • Long 类型以 l/L 结尾
  • Double 类型以 D/d结尾
// 整数字面量,数字开始于0x或者0X,为十六进制;
// 开始于非零数字,为十进制;
val hex = 0x5
// 字符字面量
val a = 'A'
// 字符串字面量
val b = "hello"
// 在 """ """ 内的字符串 支持跨行打印

// 这样打印的不会对齐 会把第二行开头的空格算进去
println(""" my name is scala
			i am ... """)
// stripMargin方法 - 对齐
println(""" |my name is scala
			|i am ... """.stripMargin)

操作符

spark sql将字符串转换成浮点数类型 spark sql 字符串长度_字符串_02

富包装类

scala里面每个基本类型都对应着一个富包装类,而这个富包装类可以提供许多额外的方法,例如0 max 5,在Int类型没有定义这个max方法,但是这个方法在Int的富包装类scala.runtime.RichInt里面有定义。

变量

函数式编程多用不可变变量。

// 不可变
val a:Int = 3
// 可变
var b:Int = 4

类型自动推断机制

val c:String = "Hello"
// 也可以
val c = "Hello"
// 对于可变类型 可以变更变量类型
var d = 5.5
// d为Double
var d = "HI"
// d为String

输入输出

  • 从控制台读入数据
import io.StdIn._
var i = readInt()
  • 输出信息到控制台
// 打印完不换行
print("hello")
// 打印完换行
println("hello")
// 支持格式化字符串
var s = "world"
printf("hello %s", s)
// 插值字符串
// s插值字符串,输出$后面的字符串
// 下面输出 a,b
var s1 = 'a'
var s2 = "b"
println(s"$s1, $s2")
// f插值字符串,在s插值字符串的基础上还可控制输出格式
// 输出 3.14
val f1 = 3.1415926
println(f"$f1%.2f")
  • 写入文件
import java.io.PrintWriter
val outputFile = new PrintWriter("xxx.txt")
outputFile.print("Hello, ")
outputFile.println("World")
outputFile.close()
  • 读取文件
import scala.io.Source
val inputFile = Source.fromFile("xxx.txt")
// 得到迭代器
val lines = inputFile.getLines

控制结构

  • 选择结构
// 如果大括号内语句只有一句 可以不用大括号
if (){}
else if (){}
else {}
  • while循环
while(){}
// or
do{
}while()
  • for循环

spark sql将字符串转换成浮点数类型 spark sql 字符串长度_大数据_03

// 注意:输出包括5
for (i <- 1 to 5) print(i)
// 1 2 3 4 5
for (i <- 1 to 5 by 2) print(i)
// 1 3 5
for (i <- 1 to 5 if i % 2 == 0) print(i)
// 2 4
for (i <- 1 to 5; j <- 1 to 3) println(i*j)
// 依次固定i 遍历j
// for 推导式
var r = for (i <- Array(1,2,3,4,5) if i%2==0) yield {println(i); i}
  • 循环控制
// 不像一般语言中的break和continue
// break 跳出 breakable
import util.control.Breaks._
val array = Array(1,3,10,5,4)
breakable{
for (i <- array){
	if (i > 5) break
	println(i)
}
}
// 输出1 3
import util.control.Breaks._
val array = Array(1,3,10,5,4)
for (i <- array){
	breakable{
	if (i > 5) break
	println(i)
}
}
// 输出 1 3 5 4

异常处理

try{
}catch{
 case
}finally{}

参考资料:《厦门大学-Spark编程基础(MOOC)》