1. String 不可变
2. StringBuilder 可变,动态增加字符串
1、string操作方法举例
比较:equals
比较忽略大小写:equalsIgnoreCase
indexOf
:返回字符串中第一个字符
所在的下标
// String && StringBuilder
val str = "abcd"
val str1 = "ABCD"
println(str.equals(str1)) // false
println(str.equalsIgnoreCase(str1)) // true
println(str.indexOf(97))
println(str.indexOf("b"))
println(str==str1)
/**
* compareToIgnoreCase
*
* 如果参数字符串等于此字符串,则返回值 0;
* 如果此字符串小于字符串参数,则返回一个小于 0 的值;
* 如果此字符串大于字符串参数,则返回一个大于 0 的值。
*/
println(str.compareToIgnoreCase(str1))
val strBuilder = new StringBuilder
// 下面都是拼接字符串
strBuilder.append("abc")
// strBuilder.+('d')
strBuilder+ 'd'
// strBuilder.++=("efg")
strBuilder++= "efg"
// strBuilder.+=('h')
strBuilder+= 'h'
strBuilder.append(1.0)
strBuilder.append(18f)
println(strBuilder) // abcdefgh1.018.0
2、Trait特征
相当于 Java 的接口,实际上它比接口还功能强大
与接口不同的是,它还可以定义属性和方法的实现
一般情况下Scala的类可以继承多个Trait,从结果来看就是实现了多重继承
trait中带属性带方法实现
- 继承的多个
trait
中如果有同名的方法
和属性
,必须要在类中使用“override”
重新定义 -
Trait
中不可以传参数 -
Trait
的定义用关键字是trait
trait Read {
val readType = "Read"
val gender = "m"
def read(name:String){
println(name+" is reading")
}
}
trait Listen {
val listenType = "Listen"
val gender = "m"
def listen(name:String){
println(name + " is listenning")
}
}
// 第一个关键字用extends;之后用with
class Person() extends Read with Listen{
override val gender = "f"
}
object test {
def main(args: Array[String]): Unit = {
val person = new Person()
person.read("zhangsan")
person.listen("lisi")
println(person.listenType)
println(person.readType)
println(person.gender)
}
}
trait中带方法不实现
trait Equle{
def isEqule(x:Any) :Boolean
def isNotEqule(x : Any) = {
!isEqule(x)
}
}
class Point(xx:Int, yy:Int) extends Equle {
val x = xx
val y = yy
def isEqule(p:Any) = {
// 是不是某个类的实例;作为某个类的实例
p.isInstanceOf[Point] && p.asInstanceOf[Point].x==this.x
}
}
object Lesson_Trait2 {
def main(args: Array[String]): Unit = {
val p1 = new Point(1,2)
val p2 = new Point(1,3)
println(p1.isEqule(p2))
println(p1.isNotEqule(p2))
}
}
网友评论