私はこれについて少し検索しましたが、役に立つものが見つかりませんでした。
ポイントは、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を返しました:(
文字列がブール値をエンコードするかどうかをテストする方法はありません。すべての実用的な効果について、「true」以外の文字列は「false」です。
return "true".equals(value) || "false".equals(value);
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
正規表現でもできます:
Pattern queryLangPattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
Matcher matcher = queryLangPattern.matcher(booleanParam);
return matcher.matches();
if ("true".equals(value) || "false".equals(value)) {
// do something
} else {
// do something else
}
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を使用してからしばらく経ちました...
実際には、ストリング(タイプ)のブール値typeをチェックすることはできません。基本的には、「文字列比較」の実行方法を尋ねています。
他の人が述べたように。 「true」または「false」(どのような条件下で)を返すかを定義する必要があります。大文字と小文字を区別しますか?値がヌルの場合はどうなりますか?
Boolean.valueOf()はあなたの友達だと思います、javadocは言います:
指定されたストリングで表される値を持つブール値を返します。返されるブール値は、文字列引数がnullではなく、大文字と小文字を区別せずに文字列「true」と等しい場合に値trueを表します。
例:Boolean.valueOf( "True")はtrueを返します。
例:Boolean.valueOf( "yes")はfalseを返します。
はい、しかし、「false」を解析しませんでしたか? 「true」を解析すると、trueが返されます。
誤解があるかもしれません:メソッドはテストせず、文字列の内容がブール値を表す場合、メソッドは文字列の内容をブールに評価します。
String value = "True";
boolean result = value.equalsIgnoreCase("true") ? true : false;
これについては、org.Apache.commons.lang.BooleanUtils#toBoolean(Java.lang.String)を他の多くの便利な関数とともにご覧ください。
function isBooleanString(val) {
if (val === "true" || val === "false"){
return true
} else {
return false
}
}
isBooleanString("true") // true
isBooleanString("false") // true
isBooleanString("blabla") // false
return value.equals("false") || value.equals("true");
考慮すべきことは、文字の大文字小文字の区別です...
の代わりに:
return value.equals("false") || value.equals("true");
これを行う:
return value.equalsIgnoreCase("false") || value.equalsIgnoreCase("true");
値がブール値かどうかを確認するために使用できるメソッドは次のとおりです。
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
これらのメソッドのJavaのドキュメントを参照することをお勧めします。間違って使用しているようです。これらのメソッドは、文字列が有効なブール値であるかどうかを通知しません。渡される文字列に基づいて、trueまたはfalseに設定されたブール値「true」または「false」を返します。
Oracleのドキュメントを参照してください
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}