web-dev-qa-db-ja.com

Javaで文字列値がブール型であるかどうかを確認するにはどうすればよいですか?

私はこれについて少し検索しましたが、役に立つものが見つかりませんでした。

ポイントは、String値が「true」または「false」の場合、戻り値はtrueである必要があるということです。他のすべての値では、falseである必要があります。

私はこれらを試しました:

String value = "false";
System.out.println("test1: " + Boolean.parseBoolean(value));
System.out.println("test2: " + Boolean.valueOf(value));
System.out.println("test3: " + Boolean.getBoolean(value));

すべての関数がfalseを返しました:(

37
Ragnar
  • parseBoolean(String)は、文字列が(大文字と小文字を区別しない)「true」の場合はtrueを返し、そうでない場合はfalseを返します
  • valueOf(String)ditto、正規のブールオブジェクトを返します
  • getBoolean(String)は赤いニシンです。指定された名前のSystemプロパティを取得し、それを「true」と比較します

文字列がブール値をエンコードするかどうかをテストする方法はありません。すべての実用的な効果について、「true」以外の文字列は「false」です。

51
mfx
return "true".equals(value) || "false".equals(value);
35
Bombe

Apache commons-lang3には、toBooleanObjectメソッドを持つBooleanUtilsがあります。

BooleanUtils.toBooleanObject(String str)

// where: 

BooleanUtils.toBooleanObject(null)    = null
BooleanUtils.toBooleanObject("true")  = Boolean.TRUE
BooleanUtils.toBooleanObject("false") = Boolean.FALSE
BooleanUtils.toBooleanObject("on")    = Boolean.TRUE
BooleanUtils.toBooleanObject("ON")    = Boolean.TRUE
BooleanUtils.toBooleanObject("off")   = Boolean.FALSE
BooleanUtils.toBooleanObject("oFf")   = Boolean.FALSE
BooleanUtils.toBooleanObject("blue")  = null
15
BillMan

正規表現でもできます:

Pattern queryLangPattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
Matcher matcher = queryLangPattern.matcher(booleanParam);
return matcher.matches();
4
Raymond Lazarus
if ("true".equals(value) || "false".equals(value)) {
  // do something
} else {
  // do something else
}
4
lutz

Booleanクラスで呼び出すメソッドは、文字列に有効なブール値が含まれているかどうかをチェックしませんが、文字列の内容を表すブール値を返します。 return true、文字列に「false」を入れると、falseを返します。

ただし、文字列に「hello」またはブール値以外の値が含まれている場合は例外をスローすると予想されるため、これらのメソッドを使用して有効なブール値を確認できます。

それをメソッドContainsBoolStringでラップして、完了です。

[〜#〜] edit [〜#〜]
ちなみに、C#にはbool Int32.TryParse(string x, out int i)などのメソッドがあり、コンテンツを解析できるかどうかをチェックしてから解析結果を返します。

int i;
if (Int32.TryParse("Hello", out i))
  // Hello is an int and its value is in i
else
  // Hello is not an int

ベンチマークは、以下よりもはるかに高速であることを示しています。

int i;
try
{
   i = Int32.Parse("Hello");
   // Hello is an int and its value is in i
}
catch
{
   // Hello is not an int
}

Javaにも同様のメソッドがありますか? Javaを使用してからしばらく経ちました...

4

実際には、ストリング(タイプ)のブール値typeをチェックすることはできません。基本的には、「文字列比較」の実行方法を尋ねています。

他の人が述べたように。 「true」または「false」(どのような条件下で)を返すかを定義する必要があります。大文字と小文字を区別しますか?値がヌルの場合はどうなりますか?

Boolean.valueOf()はあなたの友達だと思います、javadocは言います:

指定されたストリングで表される値を持つブール値を返します。返されるブール値は、文字列引数がnullではなく、大文字と小文字を区別せずに文字列「true」と等しい場合に値trueを表します。

例:Boolean.valueOf( "True")はtrueを返します。
例:Boolean.valueOf( "yes")はfalseを返します。

3
Stefan Hendriks

はい、しかし、「false」を解析しませんでしたか? 「true」を解析すると、trueが返されます。

誤解があるかもしれません:メソッドはテストせず、文字列の内容がブール値を表す場合、メソッドは文字列の内容をブールに評価します。

2
Andreas_D
String value = "True";
boolean result = value.equalsIgnoreCase("true") ? true : false;
2
Nick

これについては、org.Apache.commons.lang.BooleanUtils#toBoolean(Java.lang.String)を他の多くの便利な関数とともにご覧ください。

1
Jens Kreidler
  function isBooleanString(val) {
    if (val === "true" || val === "false"){
      return true
    } else {
      return false
    }
  }
isBooleanString("true") // true
isBooleanString("false") // true

isBooleanString("blabla") // false
0
Marian07
return value.equals("false") || value.equals("true");
0
David Hedlund

考慮すべきことは、文字の大文字小文字の区別です...

の代わりに:

return value.equals("false") || value.equals("true");

これを行う:

return value.equalsIgnoreCase("false") || value.equalsIgnoreCase("true");
0
Stuart

値がブール値かどうかを確認するために使用できるメソッドは次のとおりです。

boolean isBoolean(String value) {
    return value != null && Arrays.stream(new String[]{"true", "false", "1", "0"})
            .anyMatch(b -> b.equalsIgnoreCase(value));
}

使用例:

System.out.println(isBoolean(null)); //false
System.out.println(isBoolean("")); //false
System.out.println(isBoolean("true")); //true
System.out.println(isBoolean("fALsE")); //true
System.out.println(isBoolean("asdf")); //false
System.out.println(isBoolean("01truefalse")); //false
0

これらのメソッドのJavaのドキュメントを参照することをお勧めします。間違って使用しているようです。これらのメソッドは、文字列が有効なブール値であるかどうかを通知しません。渡される文字列に基づいて、trueまたはfalseに設定されたブール値「true」または「false」を返します。

http://www.j2ee.me/javase/6/docs/api/Java/lang/Boolean.html

0
Dan Polites

Oracleのドキュメントを参照してください

public static boolean parseBoolean(String s) {
        return ((s != null) && s.equalsIgnoreCase("true"));
    }
0
Almas Abdrazak