簡體   English   中英

在Scala中將字符串轉換為Int

[英]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來為可能引發異常的計算返回SuccessFailure

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM