Scala : 문자열을 부울로 우아하게 변환


84

Java에서는 Boolean.valueOf(myString). 그러나 Scala에서는 이 기능이없는 java.lang.Boolean숨겨져 scala.Boolean있습니다. 부울의 원래 Java 버전을 사용하는 것으로 전환하는 것은 쉽지만 옳지 않은 것 같습니다.

그렇다면 true문자열에서 추출하기위한 Scala의 단선 표준 솔루션은 무엇입니까?


단순히 정규식을 사용하지 않는 이유는 무엇입니까?
Kevin Meredith

3
전혀 간단하게 들리지 않습니다.
Jaime Hablutzel 19

답변:


144

아, 나는 어리 석다. 대답은 myString.toBoolean입니다.


9
mystring에이 코드가 예외가 발생합니다 NULL의 경우, 나는 다음 응답 접근 시도 (myString.toBoolean) .getOrElse (false)를 선호
카를로스 악단

2
Try(myString.toBoolean).getOrElse(false)예외를 던지고 잡는 작업을 수행합니다. Option(myString).exists(_.toBoolean)추가 노력을 피할 수 있습니다.
sfosdal

1
사용 Try(myString.toBoolean).getOrElse(false)이 좋습니다. 일치하지 않는 문자열을 깔끔하게 처리합니다.
NKM

110

이것은 어떤가요:

import scala.util.Try

Try(myString.toBoolean).getOrElse(false)

입력 문자열이 유효한 부울 값으로 변환되지 않으면 false예외가 발생하는 것과 반대로 반환됩니다. 이 동작은의 Java 동작과 더 비슷합니다 Boolean.valueOf(myString).


나는 예외가 당신이 원하는 것이라고 생각합니다. 사용자가 "true"또는 다른 값 대신 "1"을 입력하면 어떻게됩니까? 이 접근 방식을 사용하면 이러한 오류가 감지되지 않습니다. 하지만 이제는 Try 기능에 대해 알고 있습니다.
user42723


11

참고 : new Boolean(myString)Java로 작성하지 말고 항상 Boolean.valueOf(myString). new변형을 사용하면 불필요하게 Boolean개체 가 생성됩니다 . valueOf변형을 사용하면 이 작업이 수행되지 않습니다.


8

의 문제 myString.toBooleanmyString.toLowerCase정확히 "true"or 중 하나가 아니면 "false"예외가 발생한다는 것입니다 (문자열에 추가 공백이 있어도 예외가 발생합니다).

와 정확히 동일한 동작을 원하면 java.lang.Boolean.valueOf정규화 된 것을 사용하거나 다른 이름 (예 :)으로 부울을 가져옵니다 import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString). 또는 자신의 특정 상황 (예를 들어, 당신은 할 수 있습니다 처리하는 자신 만의 방법을 쓰기 "t"true뿐만 아니라).


1
이것은 (더 이상) 사실이 아닙니다. toLowerCase is done by toBoolean`
pme

1

나는 오늘 이것을 재미있게 보내고 1/0 값 세트를 부울로 매핑했습니다. Spark 1.4.1로 되돌려 야했고 마침내 다음과 같이 작동했습니다.

Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false)) 

여기서 p (11)은 데이터 프레임 필드입니다.

내 이전 버전에는 "Try"가 없었습니다. 이것은 작동하며 다른 방법을 사용할 수 있습니다.


2
당신은 필요하지 않습니다 iftrue else false조건부 반환하기 때문에 truefalse. 필요한 것은 Try(condition).getOrElse(false).
jwvh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.