我从csv文件中读取数据,并希望将列值分配给变量。可能存在该文件不包含所需字段的情况。然后我想分配一个默认值。我想要类似的东西:
#include<stdio.h>
#include<conio.h>
int main(){
char operation;
int num1;
int num2;
printf("enter an expression \n");
scanf("%c",&operation);
printf("enter num1 \n");
scanf("%d",&num1);
printf("enter num2 \n");
scanf("%d",&num2);
printf("entered expression is =");
printf("%d%c%d \n",num1,operation,num2);
printf("result is \n");
// Here i had to put the - sign to ensure a subtraction, I want it to be automatic
printf("%d%c%d = %d",num1,operation,num2,num1-num2);
}
没有很多ifs的最优雅方式是什么? (我是C#的java新手)
答案 0 :(得分:9)
使用方法:
private String valueOrDefault(String value, String defaultValue) {
return value == null ? defaultValue : value;
}
...
String country = valueOrDefault(nextLine[columnIndices.get("country")], "Austria");
答案 1 :(得分:5)
你可以这样做:
String country = (nextLine[columnIndices.get("country")] != null) ? nextLine[columnIndices.get("country")] : "default";
答案 2 :(得分:3)
从Java 8开始,您也可以使用
String s = Optional.ofNullable(fooStr).orElse("bar");
// may be null ----------------^^^^^^
答案 3 :(得分:1)
假设第一个选项不能抛出NullPointerException
,我会推荐Apache Commons&#39; firstNonNull
它允许您传递任意数量的参数,它将返回第一个非空值。
String country = ObjectUtils.firstNonNull(nextLine[columnIndices.get("country")], "Austria");
// Add more arguments if needed
答案 4 :(得分:1)
一个简单的if语句可以解决它:
String country = nextLine[columnIndices.get("country")];
if (country == null)
country = "Austria";
答案 5 :(得分:0)
假设您可以使用Java 8,则可以使用Optional。
Long value = findOptionalLong(ssn).orElse(0L);
将值设置为数字,如果未找到,则设置为0.
答案 6 :(得分:0)
更简单易读:
String country = nextLine[columnIndices.get("country")];
country = (country != null) ? country : "Austria";
答案 7 :(得分:0)
或创建通用方法
static <T> T nvl(T first, T ifFirstNull) {
return (first != null ? first : ifFirstNull);
}
您可以将它用于任何对象