문자열 객체를 부울 객체로 변환하는 방법?


324

String객체를 Boolean객체 로 변환하는 방법 ?


2
문자열의 가치는 무엇입니까?
James Goodwin

2
문자열을 부울로 변환하는 방법에 대한 당신의 기대는 무엇입니까?
Steve Kuo

1
myvartypeboolean = !! valuetoconvert

답변:


516

원하는 결과 유형에 따라 시도하십시오.

Boolean boolean1 = Boolean.valueOf("true");
boolean boolean2 = Boolean.parseBoolean("true");

이점:

  • 부울 : 새 부울 인스턴스를 만들지 않으므로 성능이 향상되고 가비지 수집이 줄어 듭니다. Boolean.TRUE또는 의 두 인스턴스를 재사용합니다 Boolean.FALSE.
  • 부울 : 인스턴스가 필요하지 않으며 기본 유형을 사용합니다.

공식 문서는 Javadoc에 있습니다.


업데이트 :

오토 박싱도 사용할 수 있지만 성능 비용이 있습니다.
캐스트를 피할 수 없을 때가 아니라 스스로 캐스팅해야 할 때에 만 사용하는 것이 좋습니다.


1
어쨌든 boolaen2에 Boolean.valueOf를 지정하지 않으면 자동 언 박싱되지 않습니까? 여기 parseBoolean과의 차이점이 보이지 않습니다.
Alex Feinman

9
가장 큰 문제는 부울이 받아 들여서는 안되는 것을 볼 때 예외가 발생하지 않는다는 것입니다. "true"로 보이는 것은 true를 반환하고 다른 모든 것에 는 false를 반환 합니다 . 문자열을 적절한 부울 값에 강제로 적용하려는 경우 불법 사례를 수동으로 잡기 위해 논리를 추가해야합니다.
Brandon Belvin

내가 사용하는 경우boolean boolean2 = Boolean.valueOf("true");
vipin8169

1
String 객체가 null이면 Boolean.valueOf (String)은 false를 반환하지만 Boolean은 null 값도 보유 할 수 있습니다.
amit kate

90

Boolean.valueOf (string) 또는 Boolean.parseBoolean (string)을 사용할 때는주의해야합니다 . 그 이유는 String이 "true"가 아닌 경우 메소드가 항상 false를 리턴하기 때문입니다 (대소 문자는 무시 됨).

예를 들면 다음과 같습니다.

Boolean.valueOf("YES") -> false

이 동작 때문에 부울로 변환해야하는 문자열이 지정된 형식을 따르도록 메커니즘을 추가하는 것이 좋습니다.

예를 들어 :

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
    Boolean.valueOf(string)
    // do something   
} else {
    // throw some exception
}

9
이것은 내가 본 가장 좋은 예이며 부울 형식으로 구현해야 할 것입니다. 잘못된 부울 값에 대한 예외를 throw하는 것은 많은 응용 프로그램에서 중요합니다.
Brandon Belvin

2
그것은 사실이 아닙니다. 다음은 parseBoolean의 기본 구현입니다. public static boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ( "true")); }
electricbah

Heh ... 그런 코드를 작성해야한다면 Boolean.valueOf를 호출 할 필요가 없습니다. 대신이 if 문을 간단히 재구성하여 원하는대로 수행 할 수 있습니다. ;-)

22
Boolean b = Boolean.valueOf(string);

b문자열이 널이 아니고 true대소 문자를 무시 하면 값 은 true 입니다.


17

KLE의 탁월한 답변 외에도 유연한 것을 만들 수 있습니다.

boolean b = string.equalsIgnoreCase("true") || string.equalsIgnoreCase("t") || 
        string.equalsIgnoreCase("yes") || string.equalsIgnoreCase("y") || 
        string.equalsIgnoreCase("sure") || string.equalsIgnoreCase("aye") || 
        string.equalsIgnoreCase("oui") || string.equalsIgnoreCase("vrai");

(zlajo의 답변에서 영감을 얻었습니다 ... :-))



9

글쎄, 2018 년 1 월 현재와 같이 가장 좋은 방법은 아파치를 사용하는 것 BooleanUtils.toBoolean입니다.

이렇게하면 문자열과 같은 부울이 부울로 변환됩니다 (예 : Y, 예, true, N, no, false 등).

정말 편리합니다!


4
public static boolean stringToBool(String s) {
        s = s.toLowerCase();
        Set<String> trueSet = new HashSet<String>(Arrays.asList("1", "true", "yes"));
        Set<String> falseSet = new HashSet<String>(Arrays.asList("0", "false", "no"));

        if (trueSet.contains(s))
            return true;
        if (falseSet.contains(s))
            return false;

        throw new IllegalArgumentException(s + " is not a boolean.");
    }

문자열을 부울로 변환하는 방법.


3
String[] values= new String[]{"y","Y","n","N","Yes","YES","yes","no","No","NO","true","false","True","False","TRUE","FALSE",null};
for(String booleanStr : values){
    System.out.println("Str ="+ booleanStr +": boolean =" +BooleanUtils.toBoolean(booleanStr));
}

결과:

Str =N: boolean =false
Str =Yes: boolean =true
Str =YES: boolean =true
Str =yes: boolean =true
Str =no: boolean =false
Str =No: boolean =false
Str =NO: boolean =false
Str =true: boolean =true
Str =false: boolean =false
Str =True: boolean =true
Str =False: boolean =false
Str =TRUE: boolean =true
Str =FALSE: boolean =false
Str =null: boolean =false

BooleanUtils 란 무엇입니까?
james.garriss

1
org.apache.commons.lang3.BooleanUtils는 Apache commons Lang API에서 가져온 것입니다.
다나

모든 사용 사례를 모으는 노력에 더해
gaurav 2014

1

이것이 내가 한 방법입니다.

"1##true".contains( string )

내 경우에는 대부분 1 또는 true입니다. 해시를 디바이더로 사용합니다.


0

문자열의 부울 값을 얻으려면 다음을 시도하십시오.

public boolean toBoolean(String s) {
    try {
        return Boolean.parseBoolean(s); // Successfully converted String to boolean
    } catch(Exception e) {
        return null; // There was some error, so return null.
    }
}

오류가 있으면 null을 반환합니다. 예:

toBoolean("true"); // Returns true
toBoolean("tr.u;e"); // Returns null

5
이것을 시도 했습니까? parseBoolean(String s)Javadoc에 따르면 :) 에서 예외가 발생하지 않습니다.
rapt

0

왜 정규 표현식을 사용하지 않습니까?

public static boolean toBoolean( String target )
{
    if( target == null ) return false;
    return target.matches( "(?i:^(1|true|yes|oui|vrai|y)$)" );
}

0

이 문제를 단순화하기 위해 soyuz-to 라이브러리를 만들었습니다 (X를 Y로 변환). 비슷한 질문에 대한 일련의 답변입니다. 이러한 간단한 문제에 라이브러리를 사용하는 것은 이상 할 수 있지만 많은 경우에 도움이됩니다.

import io.thedocs.soyuz.to;

Boolean aBoolean = to.Boolean("true");

확인하십시오-매우 간단하고 다른 유용한 기능이 많이 있습니다


-3

http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx를 방문하십시오 .

이것은 당신에게 무엇을 해야할지에 대한 아이디어를 줄 것입니다.

이것은 Java 설명서 에서 얻은 것입니다 .

메소드의 상세

parseBoolean

public static boolean parseBoolean(String s)

문자열 인수를 부울로 구문 분석합니다. 반환 된 부울 값은 문자열 인수가 null문자열 " true" 과 다르거 나 같지 않은 경우 true 값을 나타냅니다 .

매개 변수 :

s -해석되는 boolean 표현을 포함한 String

반환 값 : 캐릭터 라인 인수로 나타내지는 부울

이후 : 1.5


1
질문의 텍스트가 명시 적이지는 않지만 Java에 관한 질문입니다. 최소한 그런 식으로 태그가 붙어 있습니다. 이 답변은 사람들을 혼란스럽게 할 수 있습니다.
paulo.albuquerque

-3

System 클래스에서 문자열에 해당하는 부울 값을 직접 설정하고 어디서나 액세스 할 수 있습니다.

System.setProperty("n","false");
System.setProperty("y","true");

System.setProperty("yes","true");     
System.setProperty("no","false");

System.out.println(Boolean.getBoolean("n"));   //false
System.out.println(Boolean.getBoolean("y"));   //true   
 System.out.println(Boolean.getBoolean("no"));  //false
System.out.println(Boolean.getBoolean("yes"));  //true

1
이것은 문자열을 부울로 변환하는 매우 해킹 된 제안이며 의미가 없습니다.
saw303
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.