[SCALA] 스칼라 : 지능 또는 없음으로 변환 문자열
SCALA스칼라 : 지능 또는 없음으로 변환 문자열
나는 XML 필드의 숫자를 얻기 위해 노력하고 있어요
...
<Quantity>12</Quantity>
...
통하다
Some((recipe \ "Main" \ "Quantity").text.toInt)
가끔하지만, XML에서 값이되지 않을 수 있습니다. 텍스트는 "이 될 것"이는 java.lang.NumberFormatException의 발생합니다.
int로 또는 없음 중 하나를 얻을 수있는 깨끗한 방법은 무엇입니까?
해결법
-
==============================
1.
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
-
==============================
2.허용 대답 다음 사용에 보조 노트의 더. 수입 scala.util.Try 후, 고려
허용 대답 다음 사용에 보조 노트의 더. 수입 scala.util.Try 후, 고려
implicit class RichOptionConvert(val s: String) extends AnyVal { def toOptInt() = Try (s.toInt) toOption }
또는 유사하지만 약간 더 정교한 형태 해당 수입 java.lang.NumberFormatException의 후 적분 값에 변환에만 관련 예외 주소
implicit class RichOptionConvert(val s: String) extends AnyVal { def toOptInt() = try { Some(s.toInt) } catch { case e: NumberFormatException => None } }
그러므로,
"123".toOptInt res: Option[Int] = Some(123) Array(4,5,6).mkString.toOptInt res: Option[Int] = Some(456) "nan".toInt res: Option[Int] = None
-
==============================
3.스칼라 2.13 문자열 :: toIntOption 소개 :
스칼라 2.13 문자열 :: toIntOption 소개 :
"5".toIntOption // Option[Int] = Some(5) "abc".toIntOption // Option[Int] = None "abc".toIntOption.getOrElse(-1) // Int = -1
-
==============================
4.여기에 자신의 함수를 작성 필요로하지 않으며, 또한 하나에 들어하는 데 사용할 수있는 것을 이렇게 또 다른 방법이있다.
여기에 자신의 함수를 작성 필요로하지 않으며, 또한 하나에 들어하는 데 사용할 수있는 것을 이렇게 또 다른 방법이있다.
scala> import util.control.Exception._ import util.control.Exception._ scala> allCatch.opt { "42".toInt } res0: Option[Int] = Some(42) scala> allCatch.opt { "answer".toInt } res1: Option[Int] = None scala> allCatch.either { "42".toInt } res3: scala.util.Either[Throwable,Int] = Right(42)
(주제에 좋은 블로그 게시물.)
from https://stackoverflow.com/questions/23811425/scala-convert-string-to-int-or-none by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 나는 스칼라에 어떤 문자를 생략 할 수 있습니다? (0) | 2019.11.21 |
---|---|
[SCALA] 슈퍼 클래스와 케이스 클래스 복사 '방법' (0) | 2019.11.20 |
[SCALA] 이 스칼라 변수로 튜플 할당을 할 수 있습니까? [복제] (0) | 2019.11.20 |
[SCALA] 객체를 확장 할 수있는 방법이 있습니까? (0) | 2019.11.20 |
[SCALA] 스파크 DataFrame 그룹화 데이터의 표준 편차를 계산 (0) | 2019.11.20 |