代码之家  ›  专栏  ›  技术社区  ›  Anthony

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

  •  0
  • Anthony  · 技术社区  · 7 年前

    斯卡拉有 mystring.toInt 方法将字符串转换为int,但这不适用于空字符串。是否可以将空字符串转换为默认int值?(说0?)

    2 回复  |  直到 7 年前
        1
  •  2
  •   davidxxx    7 年前

    你想用 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)
    
        2
  •  0
  •   Don Branson marios    7 年前

    一种解决方案是,在调用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
    
    推荐文章