[英]String to Int in Scala
假設我需要在Scala中將String轉換為Int。 如果字符串不是數字,我想返回None
而不是拋出異常。
我發現以下解決方案
def toMaybeInt(s:String) = { import scala.util.control.Exception._ catching(classOf[NumberFormatException]) opt s.toInt }
是否有意義 ? 您會更改/改善嗎?
我將使用scala.util.Try
來為可能引發異常的計算返回Success
或Failure
。
scala> val zero = "0"
zero: String = 0
scala> val foo = "foo"
foo: String = foo
scala> scala.util.Try(zero.toInt)
res5: scala.util.Try[Int] = Success(0)
scala> scala.util.Try(foo.toInt)
res6: scala.util.Try[Int] = Failure(java.lang.NumberFormatException: For input string: "foo")
因此, toMaybeInt(s: String)
變為:
def toMaybeInt(s:String) = {
scala.util.Try(s.toInt)
}
為了在任何情況下都能獲得選擇權,無論由於數字格式錯誤而可能導致的例外情況,
import scala.util.Try
def toOptInt(s:String) = Try(s.toInt) toOption
然后
scala> toOptInt("123")
res2: Option[Int] = Some(123)
scala> toOptInt("1a23")
res3: Option[Int] = None
此外,考慮
implicit class convertToOptInt(val s: String) extends AnyVal {
def toOptInt() = Try(s.toInt) toOption
}
因此
scala> "123".toOptInt
res5: Option[Int] = Some(123)
scala> "1a23".toOptInt
res6: Option[Int] = None
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.