Как проверить, является ли значение String логическим типом в Java? - PullRequest
34 голосов
/ 19 ноября 2009

Я немного искал по этому вопросу, но не смог найти ничего полезного.

Дело в том, что если значение String равно "true" или "false", возвращаемое значение должно быть true. В любом другом значении оно должно быть ложным.

Я пробовал это:

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: (

Ответы [ 16 ]

49 голосов
/ 19 ноября 2009
  • parseBoolean (String) возвращает true, если String (без учета регистра) "true", в противном случае false
  • valueOf (String) то же самое, возвращает канонические логические объекты
  • getBoolean (String) - красная сельдь; он выбирает системное свойство с указанным именем и сравнивает его со значением "true"

Не существует метода для проверки того, кодирует ли String логическое значение; для всех практических эффектов любая не «истинная» -строка является «ложной».

33 голосов
/ 19 ноября 2009
return "true".equals(value) || "false".equals(value);
13 голосов
/ 08 апреля 2016

Apache commons-lang3 имеет BooleanUtils с методом toBooleanObject:

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
4 голосов
/ 23 августа 2011

Можно также сделать это с помощью регулярного выражения:

Pattern queryLangPattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
Matcher matcher = queryLangPattern.matcher(booleanParam);
return matcher.matches();
4 голосов
/ 19 ноября 2009

Методы, которые вы вызываете в классе Boolean, не проверяют, содержит ли строка допустимое логическое значение, но они возвращают логическое значение, представляющее содержимое строки: поместите «true» в строку, они вернуть true, поставить «ложь» в строку, они вернут 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 голосов
/ 19 ноября 2009
if ("true".equals(value) || "false".equals(value)) {
  // do something
} else {
  // do something else
}
3 голосов
/ 19 ноября 2009

На самом деле, проверка на логический тип в строке (который является типом) невозможна. По сути, вы спрашиваете, как выполнить «сравнение строк».

Как и другие заявленные. Вам необходимо определить, когда вы хотите вернуть «true» или «false» (при каких условиях). Вы хотите, чтобы он был чувствительным к регистру? Что если значение равно нулю?

Я думаю, Boolean.valueOf () - ваш друг, javadoc говорит:

Возвращает логическое значение, представленное указанной строкой. Возвращаемое логическое значение представляет значение true, если строковый аргумент не равен нулю и равен (без учета регистра) строке «true».

Пример: Boolean.valueOf ("True") возвращает true.
Пример: Boolean.valueOf ("yes") возвращает false.

2 голосов
/ 07 августа 2012
String value = "True";
boolean result = value.equalsIgnoreCase("true") ? true : false;
2 голосов
/ 19 ноября 2009

Да, но разве вы не разобрали "ложь"? Если вы анализируете «true», они возвращают true.

Возможно, есть недоразумение: методы не проверяют, если содержимое String представляет логическое значение, они оценивают содержимое String как логическое.

1 голос
/ 09 января 2013

Хорошо, для этого взгляните также на org.apache.commons.lang.BooleanUtils # toBoolean (java.lang.String), а также на множество других полезных функций.

...