2011-03-25 21 views
14

estoy desarrollando para Blackberry y me quedé atrapado con esta estúpida problema:java-me: Convierte la cadena a Boolean

Necesito convertir los valores de cadena "1" y "0" para verdadero y falso, respectivamente. Sin embargo, Blackberry JDK está basado en Java 1.3, por lo que no puedo usar Boolean.parseBoolean, Boolean.valueOf o Boolean.getValue.

Obviamente, yo puedo hacer algo como:

if (str.equals("1")) return true; 
else if (str.equals("0")) return false; 

Pero esto se ve muy feo y tal vez estos valores de cadena podría cambiar a "verdadero" y "falso" más adelante. Entonces, ¿hay otra forma de convertir entre estos tipos (String -> boolean, Java 1.3)?

ACTUALIZADO: todas las respuestas de esta pregunta fueron muy útiles pero necesitaba marcar una, así que seleccioné la respuesta de Ishtar.

Aun así, mi solución fue una combinación de varias respuestas.

+0

Esta pregunta me lleva al artículo de DailyWTF. No estoy insultándolo simplemente sugiriendo que cambiar los valores booleanos debería ser una ocurrencia muy rara. Lee http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx. Mantenlo simple incluso si haces un código difícil con el "1" o "verdadero". en la función está bien. Algunas cosas son certezas, de lo contrario nunca habrían llegado al lenguaje central. – drubin

Respuesta

14
public static boolean stringToBool(String s) { 
    if (s.equals("1")) 
    return true; 
    if (s.equals("0")) 
    return false; 
    throw new IllegalArgumentException(s+" is not a bool. Only 1 and 0 are."); 
} 

Si posteriormente cambia a "verdadero/falso", usted no pedir accidentalmente 28,000 tons of coal. Llamar con el parámetro incorrecto lanzará una excepción, en lugar de adivinar y devolver falso. En mi opinión "pancake" no es false.

9

Si no tiene Boolean.valueOf(String s) ... sí, eso es más o menos. Me definir su propio método estático como:

public static boolean booleanFromString(String s) 
{ 
    return s.equals("1"); 
} 

que resolvería su "puede cambiar a verdadero o falso después" problema, ya que se podría añadir/cambio que en el método y no tiene que cambiar nada más en su código.

2

tal vez estos valores de cadena podría cambiar a "verdadero" y "falso" más adelante

no codifican duro de su parámetro.

Así que defina su propio método así.

public static final String TRUE = "true"; //"1" 

public static boolean strToBool(String s) { 
    // don't hard code your parameter. 
    return str.equalsIgnoreCase(TRUE); 
} 
+0

En realidad ... este es un caso en el que * codifico * mi parámetro porque la definición de una cadena "verdadera" es un (o un conjunto de) valores muy particulares. +1 sin embargo. –

+0

@pst: tienes razón. pero el caso del OP es diferente. ver -> 'los valores de cadena podrían cambiar' –

+0

@John Entonces los cambiaría en el método ;-) –

2

Boolean objeto de Java (si no recuerdo mal) ya tiene 2 constantes:

  • Boolean.TRUE
  • Boolean.FALSE

que puede utilizar Boolean.booleanValue() para devolver su correspondiente boolean valor.

Usted puede crear su propio método para devolver un valueOf(String s)boolean y/o Boolean así:

public static boolean toBoolean(String s) { 
    return ((s != null) && s.equalsIgnoreCase("true")); 
} 

public static Boolean valueOf(String s) { 
    return (toBoolean(s)? Boolean.TRUE : Boolean.FALSE); 
} 
2

debe comprobar caracteres nulos y espacios en blanco. eliminarlos y verificar el valor.

return (str!=null && str.trim().equals("1")); 
0
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."); 
} 

Mejora Ishfar answer.