目录
1.scala字符串操作
1.1 字符的操作
package day3
/**
* @className: day3.StringTest
* @author: Star
* @create: 2022-07-17 14:42
*/
object StringTest {
def main(args: Array[String]): Unit = {
val name = "祖冲之"
val age = 28
//字符串通过%传值d代表INT,s代表String类型;
printf("%d岁的%s在上学",age,name)
println()
//模板字符串:通过$获取变量的值;
println(s"${age}岁的${name}结婚了")
val num = 3.1415926f
println(s"${num}是圆周率,最早是${name}算出来的。")
//f格式化模板字符串
println(f"${num}%3.2f是圆周率,最早是${name}算出来的。")
//三引号表示字符串,保持多行字符串原格式输出;
val sql = s"""
|select *
|from
| student where name="${name}"
|and
| age >${age}
|""".stripMargin //stripMargin表示边界,输出的时候不打印空格
println(sql)
}
}
1.2 从控制台读取输入并输出
package day3
import scala.io.StdIn
/**
* @className: day3.StringTest2
* @author: Star
* @create: 2022-07-17 15:21
*/
object StringTest2 {
def main(args: Array[String]): Unit = {
//输出您的姓名
println("请输出您的姓名:")
val name = StdIn.readLine()
println("请输入您的年龄:")
val num = StdIn.readInt()
//控制台输出;
println(s"欢迎${name}访问方仪科技,您当前的等级是${num}vip")
}
}
1.3 从文件读取并输出字符串
scala使用source.fromFile从文件读取内容。然后使用foreach(print(_)遍历并输出。
Source.fromFile("G:\\MyWoekSpease\\hadoop-test\\dream.txt").foreach(print(_))
1.4 将数据写入文件
PrintWritero()方法是写入文件,那么要写入,往哪里写,那就是要new一个写的地方,使用new File创建一个文件,以方便写入。
写入的时候,调用writer()方法。
因为是IO操作,因此最后需要关闭IO流操作。
//将数据写入文件
val writerIO = new PrintWriter(new File("datas/4.txt"))
writerIO.write("this is a scala,I like scala")
writerIO.close()
1.5 判断字符串是否为空
package day3
/**
* @className: day3.IsNOEmpty
* @author: Star
* @create: 2022-07-17 18:34
*/
object IsNOEmpty {
def main(args: Array[String]): Unit = {
//判断字符串是否为空;
def isEmpty(str: String): Boolean = {
//trim()去除空格
return str != null && !("".equals(str.trim))
}
println(isEmpty("有一个字符串在这里"))
}
}
运行结果为:
Scala数据类型
scala中一切的数据都是对象,都是Aay的子类。分为两类,数值类(AnyVal)型和引用类型(AnyRef),当然他们也是对象。
scala也支持自动数据类型转换。StringOps是对Java中Sting的优化,String本来是引用数据类型,但是又传递的是值,因此scala对它进行了优化,成为StringOps。
Unit,对应Java的void,用于方法返回值的位置,表示这个方法没有返回值。Unit也是一个数据类型,它有一个对象(),而Java的void不是数据类型,只是一个关键字。
Null是一个类型,只有一个对象null,它是所有引用类型(Any)的子类。
1.1 整型分类
数据类型 | 详细描述 | 数值区间(表示的范围) |
Byte | 8位有符号补码整数 | -128~127 |
Short | 16位有符号补码整数 | -32768~32767 |
Int | 32位有符号补码整数 | -2147483648~2147483647 |
Long | 64位有符号补码整数 | -9223372036854775808~9223372036854775807 |
注意:“有符号补码整数”,八个零表示一个零,1开头为负,0开头为正。
1.2 类型转换
scala也支持自动数据类型转换。从小转大直接转化,从大转小需要强制转化,但是会对手精度。
函数式编程
提起函数式编程就不得不回顾一下面向对象编程。
面向对象,万物皆对象。怎末理解面向对象呢。
我们要解决一个问题,分解对像,行为、属性,然后通过对象的关系以及行为的调用来解决问题。那么,这里的对象就是用户,行为就是用户进行的登录等行为,属性就是用户名,密码等。
面向对象就是对属性和行为进行包装。万物皆对象,都可以包装。
举个例子:
把编程语言看成做饭,面像过程是一个蛋炒饭,面像对象是一个盖浇饭。
蛋炒饭做法就是把所有的菜和米饭混在一起做。你想吃啥炒饭就要提前和老板说好。
盖浇饭做饭时米饭和菜单独做,最后把菜盖在米饭上。那么改一个土豆丝,就是土豆丝盖浇饭,盖一个回锅肉就是回锅肉盖浇饭,我可以自由的盖。
回到编程领域,盖浇饭就比较好维护,可拓展性强。同一份米饭,盖上不同的菜就是不同午饭了。这一点炒饭做不到。
但是,炒饭比较入味,过程比较简单,一次到位。
函数式编程
函数式编程不关注计算机底层的具体执行,关注函数映射,也就是数学意义上的函数(函数映射)。
在Java中,int a = 1并不是数学意义上的a = 1,因为数学上的等就是不可改变的,而Java里是可以改变的。
在scala里面,声明变量推荐val声明,也就是不可改的常量。比如 val a:Int = 1。
以上总结一下,Scala既是面向对象的编程,也是函数式编程。
1.1 函数基本语法
关键字 函数名 (参数名:参数类型,参数名:参数类型) :函数的返回值类型 = {
函数体
}
代码如下:
def sum ( x : Int , y : Int ) : Int = {
x + y
}
函数的调用:
函数名(参数)
sum(3,10)
完整的代码如下:
def sum(x: Int, y: Int): Int = {
x + y
}
val results = sum(3,10)
println(results)
1.2 函数和方法的区别
函数:为完成某一功能的程序语句的集合。
方法:在scala中,类中的函数称为方法。