如何将字符串转换为int-字符串为空时为0

时间:2018-12-11 19:33:37

标签: scala

scala具有mystring.toInt方法将字符串转换为int,但这不适用于空字符串。是否可以将空字符串转换为默认的int值? (例如0?)

2 个答案:

答案 0 :(得分:2)

您想使用String.toInt(),因为您知道可以转换为int的东西:

  

解析为Int(字符串必须仅包含十进制数字和可选   领先-)。

因此该方法未提供默认值。

通常,您可以通过以下方式执行此处理:检查字符串是否仅包含数字:

val a : Int = if (mystring.forall(Character.isDigit))  mystring.toInt else 0

但是在您的情况下(空字符串),就足够了:

val a : Int =
      if (mystring.isEmpty) 0
      else mystring.toInt

或者您也可以捕获如下异常:

import scala.util.Try;
...
val a : Int = Try(mystring.toInt).getOrElse(0)

答案 1 :(得分:1)

一种解决方案是,在调用toInt之前,始终在输入的字符串前加上“ 0”:

("0" + myString).toInt

当myString为“”时,结果为0。

当myString为“ 123”时,结果为123。

当myString为“ 123a”时,结果是一个例外,因为toInt会为您进行检查。

出于好奇,可以使用以下方法查看字符串连接的性能:

def makeAnInt(myString: String): Int = ("0" + myString).toInt
def makeAnInt2(mystring: String): Int = if (mystring.isEmpty) 0 else mystring.toInt
def makeAnInt3(mystring: String): Int = Try(mystring.toInt).getOrElse(0)

生成:

1M calls with "":
("0" + myString).toInt -> 250ms
if (mystring.isEmpty) 0 else mystring.toInt -> 156ms
Try(mystring.toInt).getOrElse(0) -> 1481ms

1M calls with "123":
("0" + myString).toInt -> 251ms
if (mystring.isEmpty) 0 else mystring.toInt -> 188ms
Try(mystring.toInt).getOrElse(0) -> 198ms