scala編程實(shí)戰(zhàn)筆記(1-字符串)

序言

優(yōu)點(diǎn)

  1. 現(xiàn)代編程語(yǔ)言,Martin Odersky開(kāi)發(fā)
  2. 純的OOP語(yǔ)言
  3. 函數(shù)式編程(FP)語(yǔ)言
  4. 在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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,550評(píng)論 0 85
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx閱讀 8,485評(píng)論 0 16
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,679評(píng)論 18 399
  • (麥子搖滾) 你是藝術(shù)家,我是藝術(shù)家,咱們都是當(dāng)代藝術(shù)家 藝術(shù)家,當(dāng)代藝術(shù)家!藝術(shù)家,當(dāng)代藝術(shù)家!歐!當(dāng)代藝術(shù)家都...
    銀河灣閱讀 1,309評(píng)論 1 2

友情鏈接更多精彩內(nèi)容