位置:首页 > 高级语言 > 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) 
返回传递的数据类型参数的字符串表示。