Bootstrap

Scala String学习1

Scala String 基础

内容参考 Scala Cookbook

内容:string声明,相等,划分,插补器

Scala 中的String就类似于Java中的String,可以使用Java中全部的String方法

可以创造一个string变量 val s  = "Hello world"

获取字符串长度   s.length  //12

可以将两个字符串合并为一个字符串 val s = "Hello" + "World"     //s = "HelloWorld"

String实例是定义在StringOps类里面,可以使用里面的所有的方法。例如foreach,filter等

ex: val str = "HelloWorld".filter(_!='l')   // str = "HeoWord"

在java里面String类是被声明为final的,但是在Scala里面增加了新的功能,通过隐式转换来实现

例子:

scala>: "scala".drop(2).take(2).capitalize   //drop(n:Int) 丢弃前n个   take(n:Int) 取前n个 capitalize 大写

res0:String = AL

比较两个字符串是否相等

和java中的判断字符串相等的方法有所不同。java中是用equals方法,scala中用"=="来判断

scala>: val s1 = "Hello"

scala>: val s2 = "H" + "ello"

scala>: s1 == s2

res0: Boolean = true

注意:“==”方法不会出现 NullPointerException异常,即使你把字符串设置为空

scala>: val s3 : String = null

scala>: s1 == s3

res1: Boolean = false

但是如果对一个空字符串进行方法调用,就会出现空指针异常

scala>:s1 = "hello"

scala>:s2 = "Hello"

scala>:s1.toUpperCase == s2.toUpperCase

java.lang.NullPointerException

忽略大小写:

equalsIgnoreCase 会比较两个字符串的字符和长度(不会比较大小写)

scala>: val s1 = "hello"

scala>: val s2 = "Hello"

scala>: s1.equalsIgnoreCase(s2)

res0: Boolean = true

字符串划分

使用spilt方法对字符串进行划分

   //spilt会返回String类型的数组

对划分的数组进行打印

Scala中的很多方法是被重写过的,对于字符串来说,有的来自Java String class ,有的来自Scala StringLike class,就按照split来分析

上面的方法来自String,下面的方法来自StringLike,但这两个方法的作用是几乎一样的

在字符串中插入变量

s

使用s可以在字符串中插入变量。根据official Scala string interpolation dpcumentation中的描述,当在字符串前面加上"s",会在字符串中产生一个string插入器,可以将变量嵌入字符串中。插入变量的前面加上"$变量名"。

也可以用花括号来嵌套表达式:${} 不加括号不会执行表达式

可以打印对象的成员变量

Scala区别于Java最大的一方面就是隐式转换,都是用val(类似于final)/var来声明变量,会根据你的赋值进行自动的转换,这就是为什么在Java中有些变量不用初始化(如全局),而Scala要求所有的变量声明之前必须要进行初始化操作,不进行初始化操作,Scala就不知道你这个变量是什么。要控制格式的输出,看下面。

f (输出格式)printf style formatting

raw interpolator

除了s和f,在Scala2.10以上被版本中提供了另一个插入器 raw interpolator 

对字符串中不进行换行

自己定义interpolator

最常用的字符表示

处理字符串中的每一个字符

如果你想对一个字符串中的每一个字符进行处理,那么就需要对字符串的每一个字符进行遍历,先看看java的实现

   在Java中,只能用for来进行遍历,而且对字符串中的字符进行运算之后产生的新的字符只能加到StringBuilder中,Java中的String都是final类型,是无法改变的,然后再讲StringBuilder转化为字符串。

       而Scala的方式和Java有很大差别。要对字符串中的每一个字符进行操作,一般使用map,foreach,for....s

       map方法将String看做是char元素的一个序列

upper2是对upper1的简化,upper3组合了两个不同的方法。这三个操作都会产生新的字符串,其中第三个操作产生两个字符串。

foreach:

如果大家不习惯用map和foreach方法,可以用下面的for loop

yield是针对于for loop设置的,每一次循环得出来的结果就会被暂时放到一个区域中,当循环完成,所有的元素会返回到一个集合中

Scala Cookbook是这样描述的:

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;