java-me: преобразование строки в логическое

Я разрабатываю для 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;

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

обновлено

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

6 ответов


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.


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

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

это решит вашу проблему "может измениться на 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);
}

Java


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

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

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

Enhance Ishfar ответ.