Scala字符串常用函数
- 1. 子字符串-substring
- 2. 字符串切分-split
- 3. 去掉首尾空格-trim
- 4. 与数值之间的转换
- 完整代码
- 参考链接
Scala中的字符串为String类型,其实就是Java中的java.lang.String
。其常用函数如下:
1. 子字符串-substring
substring()
方法返回字符串的子字符串。
substring()
方法有以下两种形式:
substring(beginIndex: Int)
beginIndex为开始索引,该形式得到从beginIndex开始,直到字符串末尾的子字符串。substring(beginIndex: Int, endIndex: Int)
beginIndex为开始索引,endIndex为结束索引,该形式得到从beginIndex开始(包含beginIndex)到endIndex(不包含endIndex)之间的子字符串。
以下来自菜鸟教程的图可以很好地说明:
代码示例如下:
val str1 = "This is text"
println("返回值 :"+str1.substring(3))
println("返回值 :"+str1.substring(2, 7))
println("返回值 :"+str1.substring(2, str1.length))
运行结果:
返回值 :s is text
返回值 :is is
返回值 :is is text
注意 若endIndex超过字符串范围,会报String index out of range: 20
错误。
2. 字符串切分-split
split()
方法根据匹配给定的正则表达式来拆分字符串,得到的结果为Array<String>
。
注意: .
、 $
、 |
和 *
等转义字符,必须得加 \\
。
注意:多个分隔符,可以用 |
作为连字符。
split()
方法有以下两种形式:
split(regex: String)
regex为正则表达式分隔符。split(regex: String, limit: Int)
regex为正则表达式分隔符,limit为分割的份数,也就是说只对前limit个分隔符进行分割。
示例代码如下:
val str2 = "Welcome-to-here"
println("- 分隔符返回值 :")
str2.split("-").foreach(println)
System.out.println("- 分隔符设置分割份数返回值 :")
str2.split("-", 2).foreach(println)
val str3 = "java.lang.String"
System.out.println("转义字符返回值 :")
str3.split("\\.", 3).foreach(println)
val str4 = "acount=? and uu =? or n=?"
println("多个分隔符返回值 :")
str4.split("and|or").foreach(println)
运行结果:
- 分隔符返回值 :
Welcome
to
here
- 分隔符设置分割份数返回值 :
Welcome
to-here
转义字符返回值 :
java
lang
String
多个分隔符返回值 :
acount=?
uu =?
n=?
3. 去掉首尾空格-trim
trim()
方法用于删除字符串的头尾空白符(含换行符),同时由于其无传入参数,括号可以省略。例如:
val str3 = "\n abc 12 \n "
println(str3.trim)
println("str3.trim length:"+str3.trim.length)
println(str3)
println("str3 length:"+str3.length)
运行结果:
abc 12
str3.trim length:6
abc 12
str3 length:11
4. 与数值之间的转换
字符串到数值的转换根据不同类型,可以通过以下方式进行:
- Int - 整型
Integer.parseInt()
- Long - 长整型
java.lang.Long.parseLong()
- Float - 浮点型
java.lang.Float.parseFloat()
- Double - 双精度浮点型
java.lang.Double.parseDouble()
示例代码如下:
val str_int: String = "23"
val str_float: String = "233.3"
val my_int: Int = Integer.parseInt(str_int)
val my_long: Long = java.lang.Long.parseLong(str_int)
val my_float: Float = java.lang.Float.parseFloat(str_float)
val my_double: Double = java.lang.Double.parseDouble(str_float)
println(my_int)
println(my_long)
println(my_float)
println(my_double)
运行结果:
23
23
233.3
233.3
注意 如果字符串格式不正确,则会抛出java.lang.NumberFormatException
异常,可以考虑用try/catch
来应对:
var odd_value: Long = 0L
try {
odd_value = java.lang.Long.parseLong(str_float)
} catch {
case e: NumberFormatException => {
e.printStackTrace()
println("Wrong format")
}
}
完整代码
StringTest.scala
package com.xxx
object StringTest {
def main(args: Array[String]): Unit = {
val str1 = "This is text"
println("返回值 :"+str1.substring(3))
println("返回值 :"+str1.substring(2, 7))
println("返回值 :"+str1.substring(2, str1.length))
val str2 = "Welcome-to-here"
println("- 分隔符返回值 :")
str2.split("-").foreach(println)
System.out.println("- 分隔符设置分割份数返回值 :")
str2.split("-", 2).foreach(println)
val str3 = "java.lang.String"
System.out.println("转义字符返回值 :")
str3.split("\\.", 3).foreach(println)
val str4 = "acount=? and uu =? or n=?"
println("多个分隔符返回值 :")
str4.split("and|or").foreach(println)
val str5 = "\n abc 12 \n "
println(str5.trim)
println("str5.trim length:"+str5.trim.length)
println(str5)
println("str5 length:"+str5.length)
val str_int: String = "23"
val str_float: String = "233.3"
val my_int: Int = Integer.parseInt(str_int)
val my_long: Long = java.lang.Long.parseLong(str_int)
val my_float: Float = java.lang.Float.parseFloat(str_float)
val my_double: Double = java.lang.Double.parseDouble(str_float)
println(my_int)
println(my_long)
println(my_float)
println(my_double)
var odd_value: Long = 0L
try {
odd_value = java.lang.Long.parseLong(str_float)
} catch {
case e: NumberFormatException => {
e.printStackTrace()
println("Wrong format")
}
}
}
}
参考链接
- Java substring() 方法 | 菜鸟教程