Как преобразовать String в boolean в java?

Я хочу преобразовать String в boolean, но Output всегда false.

a=true;
b=true;
c=true;
String zOrginal="(a^b)|c";
boolean z= Boolean.parseBoolean(zOrginal);
out.println(z);

Выход всегда ложный,

5 ответов

Если вы хотите оценить результат выражения "(a^b)|c" где a, b и c являются указанными выше переменными, просто выполните выражение непосредственно как java-код, как указано в других ответах.

boolean result = (a|b)^c;

Однако, если вы действительно хотите оценить выражение, исходящее из String, скажем, когда строка поступает из пользовательского ввода, тогда есть библиотека JExl, которая позволяет вам сделать это:

http://commons.apache.org/proper/commons-jexl/

Добавьте следующие строки в свой maven pom.xml

<dependency>
 <groupid>org.apache.commons</groupid>
 <artifactid>commons-jexl3</artifactid>
 <version>3.1</version>
</dependency>

Не проверял код ниже, но вы можете дать ему уйти.

import org.apache.commons.jexl3.*;

JexlEngine jexl = new JexlBuilder().create();
String expression = "(a|b)^c";
JexlExpression jExpression = jexl.createExpression(expression);

// JexlContext stores the values for variables used in an JexlExpression
JexlContext context = new MapContext();
context.set("a", true);
context.set("b", true);
context.set("c", true);

// evaluate expression.
Long result = (Long) jExpression.evaluate(context);
System.out.println(result); // 0 for false

Конечно, производительность будет хуже, чем выполнение кода напрямую, потому что выражение должно анализироваться в абстрактное синтаксическое дерево (AST), прежде чем его можно будет оценить.


В Java метод parseBoolean анализирует строковый аргумент как логическое. Возвращаемое значение boolean представляет значение true, если строковый аргумент не равен null и равен, игнорируя регистр, строке "true".

Итак, если вы проанализируете "(a^b)|c" вы получите false так как не оцениваете выражение.


Это исходный код foe Boolean.parseBoolean:

public static boolean parseBoolean(String b)
{
 return "true".equalsIgnoreCase(b) ? true : false;
}

Единственный раз, когда эта функция возвращает true - это если строка, переданная ей, является либо "истиной" (независимо от случая).

Если вы хотите проверить, является ли строка непустой, используйте метод String.isEmpty. Если вы ищете на самом деле "eval" строку, это не так просто... но вы можете прочитать. Есть ли функция eval() в Java? ,


Вы должны оценить выражение непосредственно не внутри String.

boolean a,b,c;
a=true;
b=true;
c=true;
boolean z= (a^b)|c;
System.out.println(z);


Существует несколько способов преобразования строки в boolean:

  1. Используйте метод Boolean.valueOf(StringVal):

    public class Test {
     public static void main(String[] args) {
     String val = "false";
     boolean result=Boolean.valueOf(val);
     System.out.println(result);
     }
    }

    В этом случае true возвращается, если и только если строка "true" в другом случае возвращается false.

  2. вы можете создать свой собственный метод, чтобы проверить строковое значение, и можете вернуть true или false на его основе.

    public class Test {
    
     public static void main(String[] args) {
     String val = "true";
     boolean result=getBoolean(val);
     System.out.println(result);
     }
    
     public static boolean getBoolean(String value)
     {
     return "true".equalsIgnoreCase(value) ? true : false;
     }
    }

licensed under cc by-sa 3.0 with attribution.