web-dev-qa-db-ja.com

StringオブジェクトをBooleanオブジェクトに変換する方法

StringオブジェクトをBooleanオブジェクトに変換する方法

304
Suresh

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

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

利点:

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

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


更新しました:

オートボクシングも使用できますが、パフォーマンスが低下します。
私はあなたが自分自身をキャストしなければならないときにだけそれを使うことを勧めます。

492
KLE

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
}
87
zlajo
Boolean b = Boolean.valueOf(string);

文字列がnullではなくbと等しい場合(大文字/小文字の区別はありません)、trueの値はtrueです。

21
CJS

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の答えに触発された... :-))

17
PhiLho
boolean b = string.equalsIgnoreCase("true");
10
Zed

さて、2018年1月現在で、これに対する最善の方法はApacheのBooleanUtils.toBooleanを使うことです。

これは、文字列のような任意のブール値をブール値に変換します。 Y、はい、真、N、いいえ、偽など.

本当に便利!

9
david30xie
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
AechoLiu
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
2
Dhana

これが私のやり方です。

"1##true".contains( string )

私の場合、ほとんどが1かtrueです。私は仕切りとしてハッシュを使います。

0
Tomislav Boras

なぜ正規表現を使わないのですか?

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

この問題を簡素化するために soyuz-to ライブラリを作成しました(XをYに変換)。これは、同様の質問に対するSO回答のセットです。このような単純な問題のためにライブラリを使用するのは奇妙かもしれませんが、多くの同様の場合に本当に役立ちます。

import io.thedocs.soyuz.to;

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

それを確認してください-それは非常にシンプルで、他の便利な機能がたくさんあります

0
fedor.belov

文字列のブール値を取得するには、これを試してください:

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
0
user5162630