Scala字符串和Trait特征

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))
  }
}


Scala学习笔记导航

  • Scala入门笔记
  • Scala类和对象
  • Scala函数
  • Scala字符串和Trait特征
  • Scala集合
  • Scala模式匹配
  • Scala的Actor模型

你可能感兴趣的:(Scala字符串和Trait特征)