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) 返回傳遞的數據類型參數的字符串表示。 |