2015-06-12 5 views
3

В Java я могу преобразовать строку в целое, используя два оператора следующим образом, который способен иметь дело с исключением:Самый сжатый способ преобразования строки в целое число в Scala?

// we have some string s = "abc" 
int num = 0; 
try{ num = Integer.parseInt(s); } catch (NumberFormatException ex) {} 

Однако методы, которые я нашел в Scala всегда использовать try-catch/match-getOrElse подход как следующий, который состоит из нескольких строк кодов и кажется немного подробным.

// First we have to define a method called "toInt" somewhere else 
def toInt(s: String): Option[Int] = { 
    try{ 
    Some(s.toInt) 
    } catch { 
    case e: NumberFormatException => None 
    } 
} 

// Then I can do the real conversion 
val num = toInt(s).getOrElse(0) 

Это единственный способ, чтобы преобразовать строку в целое число в Scala (который в состоянии иметь дело с исключениями) или есть более краткий путь?

+1

https://coderwall.com/p/lcxjzw/safely-parsing-strings-to-numbers-in-scala? –

ответ

11

Рассмотрим

util.Try(s.toInt).getOrElse(0) 

Это обеспечит целочисленное значение при ловле возможных исключений. Таким образом,

def toInt(s: String): Int = util.Try(s.toInt).getOrElse(0) 

или в случае, если Option является предпочтительным,

def toInt(s: String): Option[Int] = util.Try(s.toInt).toOption 

, где None поставляется, если преобразование не удается.

+3

Вы можете отказаться от вызова 'toOption' –

+1

@ RégisJean-Gilles спасибо :) обновлено – elm

+0

Извините, я не понял. Вы можете отбросить его для версии, которая выполняет 'getOrElse' (и возвращает' Int'), потому что сам 'Try' имеет этот метод. Но вы не можете отказаться от версии, которая возвращает 'Option [Int]', потому что 'Try' не является' Option'. –

Смежные вопросы