scala具有mystring.toInt
方法将字符串转换为int,但这不适用于空字符串。是否可以将空字符串转换为默认的int值? (例如0?)
答案 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