字符串基本使用和相等性判断
在 Scala 中,String 是一个不可变的对象,所以该对象不可被修改。这就意味着如果修改字符串就会产生一个新的字符串对象。但其他对象,如数组就是可变的对象。
字符串基本使用
Scala中字符串的数据类型是java.lang.String。如下面的代码所示:
println("Hello, world".getClass.getName) // java.lang.String
实际上,Scala String就是Java String,所以可以使用所有常规的Java字符串方法。和Java中一样,在Scala中字符串对象有个length方法,可返回该字符串的长度,即该字符串包含的字符个数。如下代码所示:
val s = "Hello, world" println(s.length) // 12
两个字符串可以使用+号连接起来:
println("Hello" + " world") // "Hello world"
但是因为Scala提供了隐式转换的魔法,String实例还可以访问StringOps类的所有方法,因此可以使用它们做许多其他事情,比如将String实例视为字符序列。因此,可以使用foreach方法遍历字符串中的每个字符,Scala将字符串当作一个字符序列。例如,我们可以遍历字符串,访问字符串中的每个字符:
"hello".foreach(println) // 遍历字符串中的每个字符
输出结果如下所示:
h e l l o
也可以将字符串视为for循环中的字符序列。如下面的代码所示:
for (c <- "hello") println(c)
输出结果如下所示:
h e l l o
Scala中字符串有一个getBytes方法,返回每个字符对应的AscII值数组。代码如下所示:
s.getBytes.foreach(println)
输出结果如下所示:
72 101 108 108 111 44 32 119 111 114 108 100
因为顺序集合上有很多可用的方法,所以也可以使用其他函数方法,如filter,以及其他操作方法。例如:
val result = "hello world".filter(_ != 'l') println("result=" + result) // result=heo word "scala".drop(2).take(2).capitalize // Al
可通过索引访问字符串中的一个字符。如下面的代码所示:
// 访问字符串中的一个字符 println("hello".charAt(0)) // 'h' println("hello"(0)) // 'h' println("hello"(1)) // 'e'
字符串也可以使用运算符,例如:
val greeting = "Hello, " + "World" val matched = (greeting == "Hello, World") val theme = "Na " * 16 + "Batman!"
输出结果如下所示:
greeting: String = Hello, World matched: Boolean = true
判断字符串相等性
在Scala中,字符串是按照内容来进行比较的。下面的代码演示了如下判断字符串的相等性:
val s1 = "Hello" val s2 = "Hello" val s3 = "H" + "ello" println("s1 == s2: " + (s1 == s2)) // true println("s1 == s3: " + (s1 == s3)) // true println("-------------------------") val s4: String = null println("s3 == s4: " + (s3 == s4)) // false println("s4 == s3: " + (s4 == s3)) // false println("-------------------------") val s11: String = null val s22: String = null println("s11 == s22: " + (s11 == s22)) // true println("-------------------------") val a = "Marisa" val b = "marisa" println("a == b: " + (a == b)) // false println("a.equalsIgnoreCase(b):" + (a.equalsIgnoreCase(b))) // true
在Scala中,使用==方法测试对象是否相等。这与Java不同,在Java中使用equals方法比较两个对象。在Scala中,AnyRef类中定义的==方法首先检查null值,然后调用第一个对象(即this)上的equals方法看这两个对象是否相等。因此,在比较字符串时不必检查null值。