文字列オブジェクトをブールオブジェクトに変換する方法


回答:


516

試してください(必要な結果のタイプに応じて):

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

利点:

  • ブール値:これはブール値の新しいインスタンスを作成しないため、パフォーマンスが向上します(ガベージコレクションが少なくなります)。Boolean.TRUEまたはの2つのインスタンスを再利用しますBoolean.FALSE
  • ブール値:インスタンスは必要ありません。プリミティブ型を使用します。

公式ドキュメントはJavadocにあります。


更新しました:

オートボクシングも使用できますが、パフォーマンスコストがかかります。
キャストが避けられないときではなく、自分自身をキャストする必要があるときにのみ使用することをお勧めします。


1
とにかく、booleen2にBoolean.valueOfを自動アンボックス化しないのですか?ここではparseBooleanとの違いはわかりません。
Alex Feinman、

9
最大の問題は、ブール値が受け入れてはならないものを検出しても例外が発生しないことです。「true」と見なされるものはすべて trueを返し、それ以外のすべての場合は falseを返します。文字列を適切なブール値に一致させる場合は、不正なケースを手動でキャッチするためのロジックを追加する必要があります。
Brandon Belvin、2011年

使用した場合boolean boolean2 = Boolean.valueOf("true");
vipin8169 2013

1
Stringオブジェクトがnullの場合、Boolean.valueOf(String)はfalseを返します。ただし、Booleanはnull値も保持できます。このためのヘルプを提供できます。
アミットケイト2015

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
これは私が見た中で最も良い例であり、そもそもブール型に何を実装する必要があったかです。無効なブール値の例外をスローすることは、多くのアプリケーションにとって重要です。
Brandon Belvin、2011年

2
いいえ、それは完全に真実ではありません。ここにparseBooleanの基本的な実装がありますpublic static boolean parseBoolean(String s){return((s!= null)&& s.equalsIgnoreCase( "true")); }
electricbah

えっと...そのようなコードを書く必要があるなら、Boolean.valueOfを呼び出す必要はありません。代わりに、このifステートメントを簡単に再構成して、必要なことを実行できます;-)

22
Boolean b = Boolean.valueOf(string);

b文字列がnullでなく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月のように、これのための最良の方法はapacheを使用すること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 2017年

1
org.apache.commons.lang3.BooleanUtilsは、Apache commons Lang APIからのものです。
Dhana、2017年

さらに、すべてのユースケースを収集するための取り組み。
gaurav

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によると、例外はスローされません。
2015

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に変換)。これは、同様の質問に対するSOの回答のセットにすぎません。これは、このような単純な問題にライブラリを使用するのは奇妙なことかもしれませんが、多くの同様の場合に本当に役立ちます。

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 -解析されるブール表現を含む文字列

戻り値:文字列引数で表されるブール値

以来: 1.5


1
質問のテキストは明確ではありませんが、これはJavaに関する質問です。少なくともそのようにタグ付けされています。この答えは人々を混乱させる可能性があります。
paulo.albuquerque 2014

-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.