序言
優(yōu)點(diǎn)
- 現(xiàn)代編程語(yǔ)言,Martin Odersky開(kāi)發(fā)
- 純的OOP語(yǔ)言
- 函數(shù)式編程(FP)語(yǔ)言
- 在JVM上完美運(yùn)行無(wú)縫使用java類庫(kù)
REPL中運(yùn)行scala
捕獲.PNG
基于vmware使用ubuntu16.04平臺(tái)開(kāi)發(fā)(當(dāng)你忘記方法時(shí)tab鍵查看可用方法屬性)
書中代碼下載地址https://github.com/alvinj
String
引言
類的幾個(gè)方法
scala> hello.length
res2: Int = 11
scala> hello + "!"
res3: String = hello world!
scala> res3
res4: String = hello world!
scala> res3.foreach(println)
h
e
l
l
o
w
o
r
l
d
!
scala> for (c <- hello) println(c)
h
e
l
l
o
w
o
r
l
d
scala> hello.getBytes.foreach(println)
104
101
108
108
111
32
119
111
114
108
100
scala> "scala".drop(2).take(2).capitalize
res13: String = Al
- foreach : 遍歷每個(gè)元素
- for循環(huán)
- 獲取ASCII碼
- + 也是一種方法,另外的一種調(diào)用方法如下:
scala> "plus".+("+")
res11: String = plus+
scala> hello foreach println
h
e
l
l
o
w
o
r
l
d
類的方法來(lái)自于StringOps、StringLike和WrappedString,其中StringOps分別是后兩者的子類。String隱式轉(zhuǎn)換StringOps。
1.1 測(cè)試字符串的相等性
- ==
- equalsIgnoreCase :忽略大小寫
scala> s1 == s2.toLowerCase
res16: Boolean = true
scala> val s2 = "Hello"
s2: String = Hello
scala> val s1 = "hello"
s1: String = hello
scala> s1 ==s2
res17: Boolean = false
scala> s1 == s2.toLowerCase
res18: Boolean = true
scala> s1.equalsIgnoreCase(s2)
res21: Boolean = true
1.2 創(chuàng)建多行字符串
“”“ ”“” ,換行采用管道符號(hào),或者使用自定義的最后面追加.stripMargin(“自定義”)
1.3 分割字符串
- split:返回?cái)?shù)組Array
scala> "hello world".split(" ")
res26: Array[String] = Array(hello, world)
\# map
scala> "hello world".split(" ") map (_.capitalize)
res27: Array[String] = Array(Hello, World)
\# 接受正則表達(dá)式為參數(shù),一個(gè)或者多個(gè)空格
scala> "hello world".split("http://s+")
res28: Array[String] = Array(hello world)
# Char
scala> "hello world".split(' ')
res29: Array[String] = Array(hello, world)
1.4 字符串中的變量代換
cala> val name = "Jack"
name: String = Jack
scala> val age = 33
age: Int = 33
scala> val weight = 65
weight: Int = 65
scala> println("$name is $age years old and weights $weight kg")
$name is $age years old and weights $weight kg
scala> println(s"$name is $age years old and weights $weight kg")
Jack is 33 years old and weights 65 kg
- 在字符串中使用表達(dá)式:s
scala> println(s"next year age: ${age +1}")
next year age: 34
scala> case class Student(name:String, id:Int)
defined class Student
scala> val Lily:Student = Student("lily", 1)
Lily: Student = Student(lily,1)
scala> println(s"${Lily.name}: ${Lily.id}")
lily: 1
\# 遇到錯(cuò)誤將類toString再打印輸出
scala> println(s"$Lily.name: ${Lily.id}")
Student(lily,1).name: 1
- f
scala> println(f"${Lily.name}: ${Lily.id}%04.0f")
lily: 0001
- raw:非轉(zhuǎn)義
scala> raw"http://s"
res11: String = //s
map
scala> "hello" map (c => (c.toByte + 1).toChar)
res0: String = ifmmp
scala> "hello" map {
| c => (c.toByte +1).toChar
| }
res1: String = ifmmp
map傳入的是一個(gè)函數(shù)
scala> def func(c:Char):Char = (c.toByte + 1).toChar
func: (c: Char)Char
scala> "hello".map(func)
res1: String = ifmmp
寫一個(gè)腳本
IDE 才有用idea+sbt,創(chuàng)建第一個(gè)project,sbt下載很多jar(下載很慢就關(guān)閉進(jìn)度):安裝好idea和scala插件后,在~目錄下有個(gè).sbt的文件ls -a 查看,進(jìn)入.sbt目錄并repositories,編輯如下并保存:
[repositories]
local
osc: http://maven.aliyun.com/nexus/content/groups/public/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots
然后idea窗口ctrl+c,重新下載jar。目錄如下
212.PNG
1.6模式匹配
- .r創(chuàng)建一個(gè)正則pattern
scala> val numPattern = "[0-9]+"
numPattern: String = [0-9]+
scala> val numPattern = "[0-9]+".r
numPattern: scala.util.matching.Regex = [0-9]+
scala> val address = "123, Dt.St 098"
address: String = 123, Dt.St 098
scala> numPattern.findFirstIn(address)
res0: Option[String] = Some(123)
scala> numPattern.findAllIn(address)
res3: scala.util.matching.Regex.MatchIterator = non-empty iterator
- Regex類
scala> import scala.util.matching.Regex
import scala.util.matching.Regex
scala> val parttern = new Regex("[0-9]+")
parttern: scala.util.matching.Regex = [0-9]+
- Option/Some/None
Option相當(dāng)于一個(gè)容器,有一個(gè)和多個(gè)值得時(shí)候返回Some,沒(méi)有就返回None。Option[String]返回Some[String]或者None
1.7字符串中的替換模式
- String的方法
cala> val address ="123dede,1212"
address: String = 123dede,1212
scala> address.replaceAll("[0-9]+", "---")
res0: String = ---dede,---
- Regex
scala> val pattern = "[0-9]+".r
pattern: scala.util.matching.Regex = [0-9]+
scala> pattern.replaceAllIn(address, "---")
res2: String = ---dede,---
1.8 匹配多個(gè)
scala> val parttern = "([a-z]+)---([0-9]+)".r
parttern: scala.util.matching.Regex = ([a-z]+)---([0-9]+)
scala> val parttern(word, num) = "asd---100"
word: String = asd
num: String = 100
1.9 index 語(yǔ)法糖
實(shí)際是調(diào)用apply
scala> "hello"(1)
res5: Char = e
scala> "hello".charAt(1)
res6: Char = e
scala> "hello".apply(1)
res7: Char = e