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);
}
вы должны проверить символы 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 ответ.