我有一个字符串,我希望在将其存储为对象的属性之前将其转换为整数。虽然我可以使用常规if语句,但我想使用三元运算来建立我对它的理解。这是我试过的代码
field_num = (((boolean bool_is_int = is_integer(string)) == true) ? (Integer int = Integer.parseInt(string)) : null);
我正在尝试(非常基本)将“field_num”(类型为int
)设置为“string”的值,如果它等于整数(通过首先转换它) 。 is_integer
是一个函数,我必须检查字符串是否等于整数。它返回一个布尔值。
感谢您的帮助。
答案 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完成后,它可能同样有效,并且维护起来会容易得多。