String
オブジェクトをBoolean
オブジェクトに変換する方法は?
String
オブジェクトをBoolean
オブジェクトに変換する方法は?
回答:
試してください(必要な結果のタイプに応じて):
Boolean boolean1 = Boolean.valueOf("true");
boolean boolean2 = Boolean.parseBoolean("true");
利点:
Boolean.TRUE
またはの2つのインスタンスを再利用しますBoolean.FALSE
。公式ドキュメントはJavadocにあります。
更新しました:
オートボクシングも使用できますが、パフォーマンスコストがかかります。
キャストが避けられないときではなく、自分自身をキャストする必要があるときにのみ使用することをお勧めします。
boolean boolean2 = Boolean.valueOf("true");
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
}
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の答えに触発されました... :-))
さて、今の2018年1月のように、これのための最良の方法はapacheを使用することBooleanUtils.toBoolean
です。
これは、文字列のようなブール値をブール値に変換します。たとえば、Y、はい、true、N、no、falseなどです。
本当に便利!
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.");
}
文字列をブール値に変換する私の方法。
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
文字列のブール値を取得するには、次のことを試してください。
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
parseBoolean(String s)
Javadocによると、例外はスローされません。
なぜ正規表現を使わないのですか?
public static boolean toBoolean( String target )
{
if( target == null ) return false;
return target.matches( "(?i:^(1|true|yes|oui|vrai|y)$)" );
}
この問題を単純化するためにsoyuz-toライブラリを作成しました(XをYに変換)。これは、同様の質問に対するSOの回答のセットにすぎません。これは、このような単純な問題にライブラリを使用するのは奇妙なことかもしれませんが、多くの同様の場合に本当に役立ちます。
import io.thedocs.soyuz.to;
Boolean aBoolean = to.Boolean("true");
確認してください-非常にシンプルで、他にも多くの便利な機能があります
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
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