Q:

Scala: convert string to Int or None

I am trying to get a number out of an xml field
...
<Quantity>12</Quantity>
...

via
Some((recipe \ "Main" \ "Quantity").text.toInt)

Sometimes there may not be a value in the xml, though.   The text will be "" and this throws an java.lang. NumberFormatException. 
What is a clean way to get either an Int or a None? 

A:

scala> import scala.util. Try
import scala.util. Try

scala> def tryToInt( s: String ) = Try(s.toInt).toOption
tryToInt: (s: String)Option[Int]

scala> tryToInt("123")
res0: Option[Int] = Some(123)

scala> tryToInt("")
res1: Option[Int] = None

A:

Scala 2.13 introduced String::toIntOption:
"5".toIntOption                 // Option[Int] = Some(5)
"abc".toIntOption               // Option[Int] = None
"abc".toIntOption.getOrElse(-1) // Int = -1

A:

More of a side note on usage following accepted answer.  After import scala.util. Try, consider
implicit class RichOptionConvert(val s: String) extends AnyVal {
  def toOptInt() = Try (s.toInt) toOption
}

or similarly but in a bit more elaborated form that addresses only the relevant exception in converting onto integral values, after import java.lang. NumberFormatException,
implicit class RichOptionConvert(val s: String) extends AnyVal {
  def toOptInt() = 
    try { 
      Some(s.toInt) 
    } catch { 
      case e: NumberFormatException => None 
    }
}

Thus,
"123".toOptInt
res: Option[Int] = Some(123)

Array(4,5,6).mkString.toOptInt
res: Option[Int] = Some(456)

"nan".toInt
res: Option[Int] = None

