Java-me: Преобразование String в boolean

Я разрабатываю для BlackBerry, и я застрял в этой глупой проблеме:

Мне нужно преобразовать значения строк "1" и "0" в true и false соответственно. Тем не менее, Blackberry JDK основан на Java 1.3, поэтому я не могу использовать Boolean.parseBoolean, Boolean.valueOf или Boolean.getValue.

Очевидно, я могу сделать что-то вроде:

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

Но это выглядит очень уродливо, и, возможно, эти строковые значения могут впоследствии измениться на "истинные" и "ложные". Итак, есть ли другой способ преобразования между этими типами (String → boolean, Java 1.3)?

ОБНОВЛЕНО: все ответы на этот вопрос были очень полезными, но мне нужно было отметить один, поэтому я выбрал ответ Иштара.

Тем не менее, мое исправление было комбинацией нескольких ответов.

Ответ 1

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.");
}

Если вы позже измените его на "true/false", вы случайно не закажете 28 000 тонн угля. Вызов с неправильным параметром вызовет исключение, вместо угадывания и возврата false. По-моему, "pancake" не false.

Ответ 2

Если у вас нет Boolean.valueOf(String s)... да, это в значительной степени. Я бы определил ваш собственный статический метод, например:

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

Это решит вашу проблему "Может измениться на истину или ложь позже", поскольку вы могли бы добавить/изменить это в методе и не изменять ничего в своем коде.

Ответ 3

возможно, эти строковые значения могут измениться на "true" и "false" позже

Не печатайте свой параметр.

Итак, определите свой собственный метод следующим образом.

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

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

Ответ 4

Java Boolean объект (если я правильно помню) имеет уже 2 константы:

  • Boolean.TRUE
  • Boolean.FALSE

вы можете использовать Boolean.booleanValue() для возврата к соответствующему значению Boolean.

Вы можете создать свой собственный метод valueOf(String s), чтобы вернуть Boolean и/или Boolean так:

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);
}

Ответ 5

вы должны проверить нулевые и пробельные символы. удалите их и проверьте значение.

return (str!=null && str.trim().equals("1"));

Ответ 6

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.");
}

Подтвердите ответ Ishfar.