Scala 字串


以下實例將字串賦值給一個常數:

object Test {
   val greeting: String = "Hello,World!"

   def main(args: Array[String]) {
      println( greeting )
   }
}

以上實例定義了變數 greeting,為字串常數,它的類型為 String (java.lang.String)。

在 Scala 中,字串的型別其實是 Java String,它本身沒有 String 類別。

在 Scala 中,String 是一個不可變的對象,所以該物件無法被修改。這就意味著你如果修改字串就會產生一個新的字串物件。

但其他對象,如數組就是可變的對象。接下來我們會為大家介紹常用的 java.lang.String 方法。



建立字串

建立字串實例如下:

var greeting = "Hello World!";

或

var greeting:String = "Hello World!";

你不一定會為字串指定String 類型,因為Scala 編譯器會自動推論字串的型別為String。

當然我們也可以直接顯示的宣告字串為String 類型,如下實例:

object Test {
   val greeting: String = "Hello, World!"

   def main(args: Array[String]) {
      println( greeting )
   }
}

執行上述程式碼,輸出結果為:

$ scalac Test.scala
$ scala Test
Hello, world!

我們前面提到過String 物件是不可變的,如果你需要建立一個可以修改的字串,可以使用String Builder 類,如下實例:

object Test {
   def main(args: Array[String]) {
      val buf = new StringBuilder;
      buf += 'a'
      buf ++= "bcdef"
      println( "buf is : " + buf.toString );
   }
}

運行實例»

執行以上程式碼,輸出結果為:

$ scalac Test.scala
$ scala Test
buf is : abcdef

字串長度

我們可以使用length()  方法來取得字串長度:

object Test {
   def main(args: Array[String]) {
      var palindrome = "www.php.cn";
      var len = palindrome.length();
      println( "String Length is : " + len );
   }
}

執行上述程式碼,輸出結果為:

$ scalac Test.scala
$ scala Test
String Length is : 14

字串連線

String 類別中使用concat() 方法來連接兩個字串:

string1.concat(string2);

實例示範:

scala> "php中文网官网: ".concat("www.php.cn");
res0: String = php中文网官网: www.php.cn

同樣你也可以使用加號(+)來連接:

scala> "php中文网官网: " + " www.php.cn"
res1: String = php中文网官网:  www.php.cn

讓我們看個完整實例:

object Test {
   def main(args: Array[String]) {
      var str1 = "php中文网官网:";
      var str2 =  "www.php.cn";
      var str3 =  "php中文网的 Slogan 为:";
      var str4 =  " php中文网";
      println( str1 + str2 );
      println( str3.concat(str4) );
   }
}

執行以上程式碼,輸出結果為:

$ scalac Test.scala
$ scala Test
php中文网官网:www.php.cn
php中文网的 Slogan 为: php中文网

建立格式化字串

String 類別中你可以使用printf() 方法來格式化字串並輸出,String format() 方法可以傳回String 物件而不是PrintStream 物件。以下實例示範了printf()  方法的使用:

object Test {
   def main(args: Array[String]) {
      var floatVar = 12.456
      var intVar = 2000
      var stringVar = "php中文网!"
      var fs = printf("浮点型变量为 " +
                   "%f, 整型变量为 %d, 字符串为 " +
                   " %s", floatVar, intVar, stringVar)
      println(fs)
   }
}

執行上述程式碼,輸出結果為:

$ scalac Test.scala
$ scala Test
浮点型变量为 12.456000, 整型变量为 2000, 字符串为  php中文网!()

String 方法

下表列出了java .lang.String 常用的方法,你可以在Scala 中使用:

##12##3 ## 4int compareToIgnoreCase(String str)#5String concat(String str)#111213#14151617 1819202122#23#24#2829#30313233##34boolean startsWith(String prefix)44#4546
#序號方法及描述

char  charAt(int index)

#傳回指定位置的字元

int compareTo(Object o)

#比較字串與物件

int compareTo(String anotherString)

#以字典順序比較兩個字串

依字典順序比較兩個字串,不考慮大小寫

將指定字串連接到此字串的結尾

6

boolean contentEquals(StringBuffer sb)

將此字串與指定的 StringBuffer 比較。

7

static String copyValueOf(char[] data)

傳回指定數組中表示該字元序列的String

8

#static String copyValueOf(char[] data, int offset, int count)

傳回指定數組中表示該字元序列的String

#9

boolean endsWith(String suffix)

測試此字串是否以指定的後綴結束

10

##boolean equals(Object anObject)

將此字串與指定的物件比較

boolean equalsIgnoreCase(String anotherString)

將此String 與另一個String 比較,不考慮大小寫

byte getBytes()

使用平台的預設字元集將此String 編碼為byte 序列,並將結果儲存到一個新的byte 陣列中

byte[] getBytes(String charsetName

使用指定的字元集將此String 編碼為byte序列,並將結果儲存到一個新的byte 陣列中

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

將字元從此字串複製到目標字元陣列

#int hashCode()

傳回此字串的雜湊碼

int indexOf(int ch)

傳回指定字元在此字串中第一次出現處的索引

int indexOf(int ch, int fromIndex)

回傳在此字串中第一次出現指定字元處的索引,從指定的索引開始搜尋

#int indexOf(String str)

傳回指定子字符串在此字串中第一次出現處的索引

int indexOf(String str, int fromIndex)

傳回指定子字串在此字串中第一次出現處的索引,從指定的索引開始

String intern()

傳回字串物件的規範化表示形式

int lastIndexOf(int ch)

傳回指定字元在此字串中最後一次出現處的索引

int lastIndexOf(int ch, int fromIndex)

傳回指定字元在此字串中最後一次出現處的索引,從指定的索引處開始進行反向搜尋

#int lastIndexOf(String str)

#傳回指定子字串在此字串中最右邊出現處的索引

int lastIndexOf(String str, int fromIndex)#

傳回指定子字串在此字串中最後一次出現處的索引,從指定的索引開始反向搜尋

#25

int length()

傳回此字串的長度

#26

boolean matches(String regex)

告知此字串是否符合給定的正規表示式

27

boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)

##測試兩個字串區域是否相等

boolean regionMatches(int toffset, String other, int ooffset, int len)

#測試兩個字串區域是否相等

String replace(char oldChar, char newChar)

返回一個新的字串,它是透過用newChar 替換此字串中出現的所有oldChar 得到的

## String replaceAll(String regex, String replacement

使用給定的replacement 取代此字串所有符合給定的正規表示式的子字串

String replaceFirst(String regex, String replacement)

使用給定的replacement 取代此字串符合給定的正規表示式的第一個子字串

#String[] split(String regex)

根據給定正規表示式的匹配拆分此字串

String[] split(String regex , int limit)

根據符合給定的正規表示式來拆分此字串

測試此字串是否以指定的前綴開始

##35
boolean startsWith(String prefix, int toffset)

測試此字串從指定索引開始的子字串是否以指定前綴開始。

36
CharSequence subSequence(int beginIndex, int endIndex)

回傳一個新的字元序列,它是此序列的一個子序列

37
String substring(int beginIndex)

傳回一個新的字串,它是此字串的一個子字串

#38
String substring(int beginIndex, int endIndex)

傳回一個新字串,它是此字串的一個子字串

39
char[] toCharArray()

將此字串轉換為新的字元陣列

40
String toLowerCase()

#使用預設語言環境的規則將此String 中的所有字元轉換為小寫

#41
String toLowerCase(Locale locale)

使用給定Locale 的規則將此String 中的所有字符都轉換為小寫

42

String toString()

傳回此物件本身(它已經是字串! )

43

#String toUpperCase()

##使用預設語言環境的規則將此String 中的所有字元都轉換為大寫

String toUpperCase(Locale locale)

#使用給定Locale 的規則將此String 中的所有字元都轉換為大寫

String trim( )

使用給定Locale 的規則將此String 中的所有字元轉換為大寫

static String valueOf(primitive data type x)

#傳回指定類型參數的字串表示形式

#