本章将带您了解Scala字符串,与Java中一样,在Scala中,字符串是不可变的对象 ,即无法修改的对象 ,另一方面,可以修改的对象 (如数组)称为可变对象 ,字符串是非常有用的对象 ,我们介绍 java.lang.String 类的重要方法。
以下代码可用于创建字符串-
var greeting="Hello Learnfk!"; or var greeting:String="Hello Learnfk!";
每当编译器在代码中遇到字符串文字时,编译器都会使用其值(在本示例中为" Hello Learnfk!")创建一个String 对象 ,字符串关键字也可以在替代声明中给出,如上所示。
请尝试以下示例程序。
object Demo { val greeting: String="Hello, Learnfk!" def main(args: Array[String]) { println( greeting ) } }
将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
Hello, Learnfk!
如前所述,String类是不可变的,字符串对象一旦创建就无法更改,如果有必要对字符串进行大量修改,请使用Scala!中可用的String Builder Class。
length()方法返回字符串对象中包含的字符数,使用以下代码段查找字符串的长度-
object Demo { def main(args: Array[String]) { var palindrome="Dot saw I was Tod"; var len=palindrome.length(); println( "String is : " + len ); } }
将以上程序保存在Demo.scala中,以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
String is : 17
String类包含用于连接两个字符串的方法-
string1.concat(string2);
这将返回一个新字符串,该字符串为string1,最后添加了string2,您还可以将concat()方法与字符串文字一起使用,如-
"My name is ".concat("San");
字符串通常用+运算符连接,如-
"Hello," + " Learnfk" + "!"
这导致-
"Hello, Learnfk!"
以下代码行可查找字符串长度。
object Demo { def main(args: Array[String]) { var str1="Dot saw I was "; var str2= "Tod"; println("Dot " + str1 + str2); } }
将以上程序保存在Demo.scala中,以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
Dot Dot saw I was Tod
您可以使用printf()和format()方法来打印带有格式化数字的输出, String类具有等效的类方法format(),该方法返回String对象而不是PrintStream对象 。
链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-strings.html
来源:LearnFk无涯教程网
尝试以下示例程序,该示例程序使用printf()方法-
object Demo { 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) } }
将以上程序保存在Demo.scala中,以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
The value of the float variable is 12.456000, while the value of the integer variable is 2000, and the string is Hello, Scala!()
Interpolation插值是使用Scala编程语言创建字符串的新方法,此函数支持Scala-2.10及更高版本,将变量引用直接嵌入过程字符串文字中的机制,字符串插值中有三种实现类型。
" s"允许在将" s"添加到字符串之前直接在处理字符串时使用变量。
以下示例代码片段用于在将字符串变量($name)附加到println语句中的普通字符串(Hello)时。
val name=“James” println(s “Hello, $name”) //输出: Hello, James
以下代码段用于使用" s"字符串处理具有任意表达式(${1 + 1})的字符串(1 + 1),任何任意表达式都可以嵌入到" ${}"中。
println(s “1 + 1=${1 + 1}”) //输出: 1 + 1=2
尝试使用以下示例
object Demo { def main(args: Array[String]) { val name="James" println(s"Hello, $name") println(s"1 + 1=${1 + 1}") } }
将以上程序保存在Demo.scala中,以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
Hello, James 1 + 1=2
" f" 插值允许创建格式化的字符串,类似于 C 语言中的printf,所有变量引用后均应紧跟 printf 样式格式说明符,如%d,%i,%f等。
让我们举一个使用普通字符串附加浮点值(height= 1.9d)和字符串变量(name=" James")的示例,这里打印$name%s(字符串变量)James,打印$height%2.2f(浮点值)1.90。
val height=1.9d val name="James" println(f"$name%s is $height%2.2f meters tall") //James is 1.90 meters tall
默认情况下,变量引用后没有%字符。它将假定为%s(字符串)。
"raw" 插值与 "s"插值类似,不同之处在于它不对字符串中的文字进行转义。
‘s' interpolator usage | ‘raw' interpolator usage |
---|---|
程序- object Demo { def main(args: Array[String]) { println(s"Result =\n a\n b") } } | 程序- object Demo { def main(args: Array[String]) { println(raw"Result =\n a\n b") } } |
输出 - Result = a b | 输出 - Result =\n a\n b |
以下是 java.lang.String 类定义的方法列表,可以在您的Scala程序中直接使用-
序列号 | 带有说明的方法 |
---|---|
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) 仅当此String表示与指定的StringBuffer相同的字符序列时,返回true。 |
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() 使用平台的默认字符集将此字符串编码为字节序列,并将输出存储到新的字节数组中。 |
13 | byte [] getBytes(String charsetName) 使用命名的字符集将此字符串编码为字节序列,并将输出存储到新的字节数组中。 |
14 | void getChars(int srcBegin,int srcEnd,char [] dst,int dstBegin) 将字符串中的字符复制到目标字符数组中。 |
15 | int hashCode() 返回此字符串的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, boolean toffset,String other,int offset,int len) 测试两个字符串区域是否相等。 |
28 | boolean regionMatches(int toffset,String other,int offset,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() 使用默认语言环境的规则将此String中的所有字符转换为小写。 |
41 | String toLowerCase(Locale locale) 使用给定语言环境的规则将此字符串中的所有字符转换为小写。 |
42 | String toString() 此对象 (已经是一个字符串!)本身会返回。 |
43 | String toUpperCase() 使用默认语言环境的规则将此String中的所有字符转换为大写。 |
44 | String toUpperCase(Locale locale) 使用给定语言环境的规则将此String中的所有字符转换为大写。 |
45 | String trim() 返回字符串的副本,省略开头和结尾的空格。 |
46 | static String valueOf(primitive data type x) 返回传递的数据类型参数的字符串表示形式。 |
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)