- Scala Tutorial
- Scala - Home
- Scala - Overview
- Scala - Environment Setup
- Scala - Basic Syntax
- Scala - Data Types
- Scala - Variables
- Scala - Classes & Objects
- Scala - Access Modifiers
- Scala - Operators
- Scala - IF ELSE
- Scala - Loop Statements
- Scala - Functions
- Scala - Closures
- Scala - Strings
- Scala - Arrays
- Scala - Collections
- Scala - Traits
- Scala - Pattern Matching
- Scala - Regular Expressions
- Scala - Exception Handling
- Scala - Extractors
- Scala - Files I/O
- Scala Useful Resources
- Scala - Quick Guide
- Scala - Useful Resources
- Scala - Discussion
Scala - 字符串
本章将带您了解 Scala 字符串。在Scala中,和在Java中一样,字符串是一个不可变的对象,即不能被修改的对象。另一方面,可以修改的对象(如数组)称为可变对象。字符串是非常有用的对象,在本节的其余部分中,我们将介绍java.lang.String类的重要方法。
创建字符串
以下代码可用于创建字符串 -
var greeting = "Hello world!"; or var greeting:String = "Hello world!";
每当编译器在代码中遇到字符串文字时,它就会创建一个带有其值的 String 对象,在本例中为“Hello world!”。字符串关键字也可以在备用声明中给出,如上所示。
尝试以下示例程序。
例子
object Demo { val greeting: String = "Hello, world!" def main(args: Array[String]) { println( greeting ) } }
将上述程序保存在Demo.scala中。以下命令用于编译和执行该程序。
命令
\>scalac Demo.scala \>scala Demo
输出
Hello, world!
正如前面提到的,String 类是不可变的。字符串对象一旦创建就无法更改。如果需要对字符串进行大量修改,请使用 Scala! 中提供的 String Builder 类。
字符串长度
用于获取有关对象的信息的方法称为访问器方法。length() 方法是可用于字符串的一种访问器方法,它返回字符串对象中包含的字符数。
使用以下代码段查找字符串的长度 -
例子
object Demo { def main(args: Array[String]) { var palindrome = "Dot saw I was Tod"; var len = palindrome.length(); println( "String Length is : " + len ); } }
将上述程序保存在Demo.scala中。以下命令用于编译和执行该程序。
命令
\>scalac Demo.scala \>scala Demo
输出
String Length is : 17
连接字符串
String 类包含一个用于连接两个字符串的方法 -
string1.concat(string2);
这将返回一个新字符串,即 string1,并在末尾添加了 string2。您还可以将 concat() 方法与字符串文字一起使用,如下所示 -
"My name is ".concat("Zara");
字符串更常见地使用 + 运算符连接,如 -
"Hello," + " world" + "!"
这导致 -
"Hello, world!"
以下代码行查找字符串长度。
例子
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 对象。
尝试以下示例程序,它使用 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!()
字符串插值
字符串插值是在 Scala 编程语言中创建字符串的新方法。此功能支持Scala-2.10及更高版本。字符串插值:将变量引用直接嵌入到进程字符串文字中的机制。
字符串插值中有三种类型(插值器)的实现。
's' 字符串插值器
当您在字符串前面添加“s”时,文字“s”允许在处理字符串时直接使用变量。范围内的任何字符串变量都可以在字符串中使用。以下是 's' 字符串插值器的不同用法。
以下示例代码片段用于在 println 语句中将字符串变量 ($name) 附加到普通字符串 (Hello) 时实现“s”插值器。
val name = “James” println(s “Hello, $name”) //output: Hello, James
字符串插值器还可以处理任意表达式。以下代码片段使用 's' 字符串插值器处理具有任意表达式 (${1 + 1}) 的字符串 (1 + 1)。任何任意表达式都可以嵌入“${}”中。
println(s “1 + 1 = ${1 + 1}”) //output: 1 + 1 = 2
尝试以下实现“s”插值器的示例程序。
例子
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' 插值器
文字“f”插值器允许创建格式化字符串,类似于 C 语言中的 printf。使用“f”插值器时,所有变量引用后面都应跟有printf样式格式说明符,例如 %d、%i、%f 等。
让我们以将浮点值(高度= 1.9d)和字符串变量(名称=“James”)附加到普通字符串为例。以下是实现“f”插值器的代码片段。这里 $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
它是类型安全的(即,变量引用和以下格式说明符应该匹配,否则会显示错误。'f' 插值器利用 Java 中可用的字符串格式实用程序(格式说明符)。默认情况下,变量引用后没有 % 字符。它将假定为 %s(字符串)。
“原始”插值器
“raw”插值器与“s”插值器类似,只是它不执行字符串内的文字转义。表中的以下代码片段将不同地使用“s”和“原始”插值器。在“s”用法的输出中,“\n”作为新行起作用,而在“raw”用法的输出中,“\n”不会起作用。它将打印带有转义字母的完整字符串。
's' 插值器的使用 | “原始”插值器的使用 |
---|---|
计划- 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 索引) 返回指定索引处的字符。 |
2 |
intcompareTo(对象o) 将此字符串与另一个对象进行比较。 |
3 |
intcompareTo(字符串另一个字符串) 按字典顺序比较两个字符串。 |
4 |
int 比较忽略大小写(字符串 str) 按字典顺序比较两个字符串,忽略大小写差异。 |
5 |
字符串连接(字符串 str) 将指定字符串连接到该字符串的末尾。 |
6 |
布尔 contentEquals(StringBuffer sb) 当且仅当此 String 表示与指定 StringBuffer 相同的字符序列时,返回 true。 |
7 |
静态字符串 copyValueOf(char[] 数据) 返回一个 String,表示指定数组中的字符序列。 |
8 |
static String copyValueOf(char[] 数据, int 偏移量, int 计数) 返回一个 String,表示指定数组中的字符序列。 |
9 |
布尔结束(字符串后缀) 测试该字符串是否以指定后缀结尾。 |
10 |
布尔等于(对象 anObject) 将此字符串与指定对象进行比较。 |
11 |
布尔值 equalsIgnoreCase(String anotherString) 将此字符串与另一个字符串进行比较,忽略大小写。 |
12 |
字节 getBytes() 使用平台的默认字符集将此 String 编码为字节序列,并将结果存储到新的字节数组中。 |
13 |
byte[] getBytes(字符串字符集名称) 使用指定的字符集将此 String 编码为字节序列,并将结果存储到新的字节数组中。 |
14 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中。 |
15 |
int 哈希码() 返回该字符串的哈希码。 |
16 |
int indexOf(int ch) 返回指定字符在此字符串中第一次出现的索引。 |
17 号 |
int indexOf(int ch, int fromIndex) 返回此字符串中指定字符第一次出现的索引,从指定索引处开始搜索。 |
18 |
int indexOf(字符串 str) 返回此字符串中指定子字符串第一次出现的索引。 |
19 |
int indexOf(字符串 str, int fromIndex) 返回此字符串中指定子字符串第一次出现的索引,从指定索引开始。 |
20 |
字符串实习生() 返回字符串对象的规范表示。 |
21 |
int lastIndexOf(int ch) 返回此字符串中最后一次出现的指定字符的索引。 |
22 |
int lastIndexOf(int ch, int fromIndex) 返回此字符串中指定字符最后一次出现的索引,从指定索引开始向后搜索。 |
23 |
int lastIndexOf(字符串 str) 返回此字符串中指定子字符串最右侧出现位置的索引。 |
24 |
int lastIndexOf(字符串 str, int fromIndex) 返回此字符串中指定子字符串最后一次出现的索引,从指定索引开始向后搜索。 |
25 |
整数长度() 返回该字符串的长度。 |
26 |
布尔匹配(字符串正则表达式) 判断该字符串是否与给定的正则表达式匹配。 |
27 |
布尔regionMatches(布尔ignoreCase,int toffset,字符串其他,int offset,int len) 测试两个字符串区域是否相等。 |
28 |
布尔regionMatches(int toffset, String other, int offset, int len) 测试两个字符串区域是否相等。 |
29 |
字符串替换(char oldChar , char newChar) 返回一个新字符串,该字符串是用 newChar 替换该字符串中所有出现的 oldChar 所得的结果。 |
30 |
字符串replaceAll(字符串正则表达式,字符串替换 将此字符串中与给定正则表达式匹配的每个子字符串替换为给定替换。 |
31 |
字符串replaceFirst(字符串正则表达式,字符串替换) 将此字符串中与给定正则表达式匹配的第一个子字符串替换为给定替换。 |
32 |
字符串[]分割(字符串正则表达式) 围绕给定正则表达式的匹配项拆分此字符串。 |
33 |
String[] split(字符串正则表达式,int limit) 围绕给定正则表达式的匹配项拆分此字符串。 |
34 |
布尔开始于(字符串前缀) 测试此字符串是否以指定前缀开头。 |
35 |
布尔startsWith(字符串前缀,int toffset) 测试此字符串是否以指定索引开头的指定前缀开头。 |
36 |
CharSequence subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是该序列的子序列。 |
37 |
字符串子串(int beginIndex) 返回一个新字符串,该字符串是该字符串的子字符串。 |
38 |
字符串子串(int beginIndex,int endIndex) 返回一个新字符串,该字符串是该字符串的子字符串。 |
39 |
char[] toCharArray() 将此字符串转换为新的字符数组。 |
40 |
字符串 toLowerCase() 使用默认区域设置的规则将此字符串中的所有字符转换为小写。 |
41 |
字符串 toLowerCase(区域设置 locale) 使用给定区域设置的规则将此字符串中的所有字符转换为小写。 |
42 |
字符串转字符串() 该对象(已经是一个字符串!)本身被返回。 |
43 |
字符串转大写() 使用默认区域设置的规则将此字符串中的所有字符转换为大写。 |
44 |
字符串转大写(语言环境 locale) 使用给定区域设置的规则将此字符串中的所有字符转换为大写。 |
45 |
字符串修剪() 返回字符串的副本,省略前导和尾随空格。 |
46 |
static String valueOf(原始数据类型 x) 返回传递的数据类型参数的字符串表示形式。 |