2009-10-08 4 views

ответ

416

Try (в зависимости от того, какой тип результата вы хотите):

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

Преимущество:

  • Boolean: это не создает новые экземпляры Boolean, так что производительность лучше (и менее garbage- коллекция). Он повторно использует два экземпляра либо Boolean.TRUE, либо Boolean.FALSE.
  • boolean: экземпляр не требуется, вы используете примитивный тип.

Официальная документация находится в Javadoc.


ОБНОВЛЕНО:

Autoboxing также может быть использован, но он имеет стоимость исполнения.
Я предлагаю использовать его только тогда, когда вам придется бросать себя, а не когда бросок можно избежать.

+0

не будет присвоить Boolean.valueOf для boolaen2 быть автоматически-unboxed в любом случае? Я не вижу разницы в parseBoolean здесь. –

+6

Самая большая проблема заключается в том, что Boolean не будет исключать, когда он видит что-то, чего он не должен принимать. Он вернет true для всего, что он видит как «истинный», и вернет false для * всего остального *. Если вы пытаетесь привести соответствие строки к соответствующему логическому значению, вам придется добавить дополнительную логику, чтобы вручную вылавливать незаконные случаи. –

+0

Что делать, если я использую 'boolean boolean2 = Boolean.valueOf (" true ");' – vipin8169

18
Boolean b = Boolean.valueOf(string); 

Значение b верно, если строка не является пустой и равной true (без учета случае).

77

Вы должны быть осторожны при использовании Boolean.valueOf (строка) или Boolean.parseBoolean (строка). Причина этого в том, что методы всегда будут возвращать false, если строка не равна «true» (случай игнорируется).

Например:

Boolean.valueOf("YES") -> false 

Из-за такого поведения я бы рекомендовал добавить некоторый механизм для того, чтобы строка, которая должна быть переведена на булевой следует заданный формат.

Например:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) { 
    Boolean.valueOf(string) 
    // do something 
} else { 
    // throw some exception 
} 
+7

Это лучший пример, который я видел и что должно было быть реализовано в булевом типе для начала. Выброс исключения для недействительного логического значения важен для многих приложений. –

+1

Нет, это не совсем так. вот базовая реализация parseBoolean public static boolean parseBoolean (String s) { return ((s! = Null) && s.equalsIgnoreCase ("true")); } – electricalbah

18

Наряду с отличным ответом 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 в ... :-))

-3

http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

Это даст вам представление о том, что делать.

Это то, что я получаю от Java documentation:

Деталь метода

parseBoolean

public static boolean parseBoolean(String s)

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

Параметры:

s - строка, содержащая логическое представление, чтобы быть разобрана

Возвращает: в логическом значении, представленного строкового аргументом

С: 1.5

+1

Хотя текст вопроса не является явным, это вопрос о Java. По крайней мере, это помечено таким образом. Этот ответ может смутить людей. –

0

Это, как я это сделал:

"1##true".contains(string)

Для моего случая это в основном либо 1 или правда. Я использую хеши как разделители.

-2

можно непосредственно установить логическое значение, эквивалентное для любой строки Системным класса и доступ к нему в любом месте ..

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 
2

Чтобы получить логическое значение в строку, попробуйте следующее:

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 
+4

Вы пробовали это? :) 'parseBoolean (String s)' не генерирует исключения, согласно Javadoc. – rapt

3
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
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 
+0

Что такое BooleanUtils? –

+0

org.apache.commons.lang3.BooleanUtils - это Apo Commons Lang API. – Dhana

0

Почему бы не использовать регулярное выражение?

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

Ну, как сейчас в январе 2018 года, лучший способ для этого является использование сервера Apache BooleanUtils.toBoolean.

Это преобразование любой логической строки, такой как строка, булево, например. Y, да, истина, N, нет, ложная и т. Д.

Действительно удобно!

Смежные вопросы