你好,我正在寻找一种解决方案,它将返回给定索引的字符串的子串。目前为了避免索引越界异常,使用if和else检查。是否有更好的方法(函数式)。
def subStringEn(input:String,start:Int,end:Int)={
// multiple if check for avoiding index out of bound exception
input.substring(start,end)
}
你好,我正在寻找一种解决方案,它将返回给定索引的字符串的子串。目前为了避免索引越界异常,使用if和else检查。是否有更好的方法(函数式)。
def subStringEn(input:String,start:Int,end:Int)={
// multiple if check for avoiding index out of bound exception
input.substring(start,end)
}
我不确定您希望处理索引越界的函数应该做什么,但是slice
可能符合您的需求:
input.slice(start, end)
一些例子:
scala> "hello".slice(1, 2)
res6: String = e
scala> "hello".slice(1, 30)
res7: String = ello
scala> "hello".slice(7, 8)
res8: String = ""
scala> "hello".slice(0, 5)
res9: String = hello
Try
是其中一种实现的方式。另一种方法是只有在长度大于结束位置时才使用Option[String]
进行子串操作。
无效的结束索引
scala> val start = 1
start: Int = 1
scala> val end = 1000
end: Int = 1000
scala> Option("urayagppd").filter(_.length > end).map(_.substring(start, end))
res9: Option[String] = None
scala> val end = 6
end: Int = 6
scala> Option("urayagppd").filter(_.length > end).map(_.substring(start, end))
res10: Option[String] = Some(rayag)
此外,您可以将filter
和map
结合使用并如下使用.collect
:
scala> Option("urayagppd").collect { case x if x.length > end => x.substring(start, end) }
res14: Option[String] = Some(rayag)
scala> val end = 1000
end: Int = 1000
scala> Option("urayagppd").collect { case x if x.length > end => x.substring(start, end) }
res15: Option[String] = None