Scala字符串常用函数

本文介绍了Scala中字符串处理的常见函数,包括substring用于获取子字符串,split基于正则表达式分割字符串,trim去除首尾空格,以及如何将字符串转换为不同类型的数值。同时,文章提供了代码示例和注意事项,如避免超出字符串范围的索引错误和处理不正确的数字格式。

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)之间的子字符串。

以下来自菜鸟教程的图可以很好地说明:
子字符串-substring代码示例如下:

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")
      }
    }
  }
}

参考链接

  1. Java substring() 方法 | 菜鸟教程
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值