位置:首頁 > 高級語言 > Scala教學 > Scala字符串

Scala字符串

考慮下麵這個簡單的例子,我們給一個字符串類型的 val 變量:

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

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

在這裡,上麵的值類型是從Java的java.lang.String借來的,因為Scala的字符串也是Java字符串。這一點是非常好的,要注意:每一個Java類可用在Scala中。因此,Scala冇有String類並直接利用Java字符串String類。因此,這一章已被寫入保持Java String的基礎。

在Scala中與在Java中一樣,一個字符串是不可變的對象,也就是,這是不能被修改的對象。另一方麵,對象是可以修改的,如數組對象,被稱為可變對象。由於字符串是非常有用的對象,在本節的其餘部分,我們目前最重要了解類java.lang.String的方法定義。

創建字符串:

最直接的方法來創建一個字符串的編寫方法是:

var greeting = "Hello world!";

or

var greeting:String = "Hello world!";

每當遇到一個字符串在代碼中,編譯器創建String對象及其值,在這個示例中使用:“Hello world!”,但如果你喜歡,可以給字符串,因為這裡我已經在聲明中交替顯示。

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

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

讓我們編譯和運行上麵的程序,這將產生以下結果:

C:/>scalac Test.scala
C:/>scala Test
Hello, world!

C:/>

正如前麵提到的,String類是不可變的,所以一旦它被創建,String 對象不能改變。如果需要做大量修改字符的字符串,那麼應該使用在Scala提供字符串構建器類( String Builder )。

字符串長度:

用於獲得關於對象的信息的方法是已知的存取方法。可以使用字符串使用一個存取方法是length()方法,它返回包含在字符串對象中的字符數。

下麵兩行代碼被執行之後,len 等於17:

object Test {
   def main(args: Array[String]) {
      var palindrome = "Dot saw I was Tod";
      var len = palindrome.length();
      println( "String Length is : " + len );
   }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

C:/>scalac Test.scala
C:/>scala Test
String Length is : 17

C:/>

連接字符串:

String類包括用於連接兩個字符串的方法:

string1.concat(string2);

這返回一個string1將string2添加到它的末尾的一個新字符串。也可以使用concat()方法用字符串,如:

"My name is ".concat("Zara");

字符串比較常用連接在一起,使用+運算符,如:

"Hello," + " world" + "!"

這將產生:

"Hello, world!"

讓我們來看看下麵的例子:

object Test {
   def main(args: Array[String]) {
      var str1 = "Dot saw I was ";
      var str2 =  "Tod";
      println("Dot " + str1 + str2);
   }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

C:/>scalac Test.scala
C:/>scala Test
Dot Dot saw I was Tod

C:/>

創建格式化字符串:

已經有兩個方法:printf()和format()方法使用格式化數字打印輸出。 String類有一個等價類的方法,format(),它返回一個String對象,而不是一個PrintStream對象。讓我們看看下麵的例子,這是使用printf()方法:

object Test {
   def main(args: Array[String]) {
      var floatVar = 12.456
      var intVar = 2000
      var stringVar = "Hello, Scala!"
      var fs = printf("The value of the float variable is " +
                   "%f, while the value of the integer " +
                   "variable is %d, and the string " +
                   "is %s", floatVar, intVar, stringVar)
      println(fs)
   }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

C:/>scalac Test.scala
C:/>scala Test
The value of the float variable is 12.456000, while the 
value of the integer var iable is 2000, and the 
string is Hello, Scala!()

C:/>

字符串的方法:

以下是由java.lang.String類中定義,並且可以直接在Scala程序中使用方法列表:

SN 方法及描述
1 char charAt(int index) 
返回指定索引處的字符
2 int compareTo(Object o) 
該字符串與另一個對象比較
3 int compareTo(String anotherString)
按字典順序比較兩個字符串
4 int compareToIgnoreCase(String str) 
比較兩個字符串字典順序,忽略大小寫差異
5 String concat(String str)
將指定字符串添加這個字符串的結尾處
6 boolean contentEquals(StringBuffer sb) 
返回true當且僅當此String表示的字符與指定的StringBuffer相同的序列
7 static String copyValueOf(char[] data) 
返回表示所指定的數組中的字符序列的字符串
8 static String copyValueOf(char[] data, int offset, int count)
返回表示所指定的數組中的字符序列的字符串。
9 boolean endsWith(String suffix) 
測試此字符串是否以指定的後綴結束。
10 boolean equals(Object anObject)
比較該字符串和指定的對象。
11 boolean equalsIgnoreCase(String anotherString)
比較該字符串到另一個字符串,不考慮大小寫。
12 byte getBytes() 
將此String解碼使用平台的默認字符集的字節序列,並將結果存儲到一個新的字節數組。
13 byte[] getBytes(String charsetName
將此String解碼使用指定的字符集的字節序列,並將結果存儲到一個新的字節數組。
14 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
複製字符從這個字符串到目標字符數組。
15 int hashCode()
返回此字符串的哈希碼。
16 int indexOf(int ch) 
返回此字符串指定字符第一次出現處的索引。
17 int indexOf(int ch, int fromIndex) 
返回此字符串指定的字符,開始搜索指定索引處的第一次出現處的索引。
18 int indexOf(String str)
返回此字符串的指定子第一次出現處的索引。
19 int indexOf(String str, int fromIndex)
返回此字符串中第一次出現的指定子字符串,開始在指定的索引處的索引。
20 String intern()
返回字符串對象的規範表示。
21 int lastIndexOf(int ch) 
返回此字符串指定字符最後一次出現處的索引。
22 int lastIndexOf(int ch, int fromIndex) 
返回此字符串指定字符最後一次出現處的索引,搜索開始向後指定索引處。
23 int lastIndexOf(String str)
返回此字符串指定子的最右邊出現處的索引。
24 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) 
測試兩個字符串區域是否相等。
28 boolean regionMatches(int toffset, String other, int ooffset, int len)
測試兩個字符串區域是否相等。
29 String replace(char oldChar, char newChar)
返回通過用newChar更換oldChar中出現的所有該字符串產生一個新的字符串。
30 String replaceAll(String regex, String replacement
替換此字符串匹配給定的正則表達式以給定替換的每個子字符串。
31 String replaceFirst(String regex, String replacement) 
替換此字符串匹配給定的正則表達式以給定替換的第一子字符串。
32 String[] split(String regex) 
來此字符串圍繞拆分給定的正則表達式的匹配。
33 String[] split(String regex, int limit) 
圍繞拆分給定的正則表達式的匹配來此字符串。
34 boolean startsWith(String prefix)
測試此字符串是否以指定的前綴開始。
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()
將所有在這個字符串的字符使用默認語言環境的規則轉換為小寫。
41 String toLowerCase(Locale locale)
將所有在此字符串中的字符使用給定Locale的規則轉換為小寫。
42 String toString()
這個對象(這已經是一個字符串!)本身被返回。
43 String toUpperCase() 
將所有的字符在這個字符串使用默認語言環境的規則轉換為大寫。
44 String toUpperCase(Locale locale) 
將所有的字符在這個字符串使用給定的Locale規則轉換為大寫。
45 String trim() 
返回字符串的副本,以開頭和結尾的空白忽略。
46 static String valueOf(primitive data type x) 
返回傳遞的數據類型參數的字符串表示。