使用三元运算符将字符串转换为整数

时间:2014-01-03 23:02:40

标签: java syntax ternary-operator

我有一个字符串,我希望在将其存储为对象的属性之前将其转换为整数。虽然我可以使用常规if语句,但我想使用三元运算来建立我对它的理解。这是我试过的代码

        field_num = (((boolean bool_is_int = is_integer(string)) == true) ? (Integer int = Integer.parseInt(string)) : null);

我正在尝试(非常基本)将“field_num”(类型为int)设置为“string”的值,如果它等于整数(通过首先转换它) 。 is_integer是一个函数,我必须检查字符串是否等于整数。它返回一个布尔值。

感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

我会做这样的事情:

Integer theint = is_integer(thestr) ? Integer.parseInt(thstr) : null;

您不能将NULL分配给内部int,但可以分配给Integer对象。通常,当然,您只需依赖parseInt()调用抛出异常,而不是事先明确地测试字符串的整数。

答案 1 :(得分:0)

field_num = is_integer(string) ? Integer.parseInt(string): -1;

简单地说,如果'string'是一个整数,那么解析int的字符串并将其设置为field_num,否则将其设置为-1。 -1是任意的。你应该使用一个对field_num无效的数字。

您不需要is_integer(string)== true,因为它的计算结果与is_integer(string)相同。您也不需要设置boolean bool_is_int,因为除非您以后在程序中实际需要该值。

答案 2 :(得分:0)

您应该只使用if / else语句。如果要根据条件将变量设置为两个值之一,则Ternary运算符非常有用。在您的示例中,如果字符串不是整数,则不希望设置值,因此三元不适合这种情况。

答案 3 :(得分:0)

保持简单:)

int field_num = isInt(string) ? Integer.parseInt(string) : Integer.MAX_VALUE;

if (field_num == Integer.MAX_VALUE) {
     // error; string is not a valid representation of int
}

确定String是否代表int值:

public static boolean isInt(String s) {
    try { 
        Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
        return false; 
    }
    return true;
}

答案 4 :(得分:0)

[改正]

一次学习一件事。

首先,?:运算符(通常称为条件运算符,或if / else运算符;“三元”只意味着它需要三个参数,并且它是唯一的C运算符,因此会产生混淆) ...

field_num = is_integer(string) ? Integer.parseInt(string) : null;

唉唉。所以field_num是一个整数。如果你这么说会有所帮助。

第二:传球分配。如果你不知道你需要这样做,你就不能完全明白你在做什么以及为什么,不要。它很难阅读,而且很少适合。

此外,“int”不是合法的变量名称。

但如果你坚持:

Integer myint;
boolean bool_is_int;
field_num = (bool_is_int = is_integer(string)) ? (myint = Integer.parseInt(string)) : null;

myint在false / else情况下的价值是什么?它留下了之前设置的任何东西。这可能就是您的意图,但是阅读代码的人很难理解。

在大多数情况下,除非?:是一个非常简单的,可以一目了然地阅读 - (foo!=null) ? foo.doSomething() : defaultValue - 你最好使用真正的if / then / else语句。在编译器和JIT完成后,它可能同样有效,并且维护起来会容易得多。