java-me: конвертировать строку в логическое значение - PullRequest
14 голосов
/ 25 марта 2011

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

14 голосов
/ 25 марта 2011
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.

9 голосов
/ 25 марта 2011

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

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

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

2 голосов
/ 25 марта 2011

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

return (str!=null && str.trim().equals("1"));
2 голосов
/ 25 марта 2011

Объект 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);
}
2 голосов
/ 25 марта 2011

возможно, позже эти строковые значения могут измениться на "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);
}
0 голосов
/ 10 декабря 2015
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.");
}

Улучшение Ишфар ответ.

...