在 Talen Studio 中使用三元运算符时出现空指针异常
Null pointer Exception while using ternary operator in Talen Studio
我正在使用 talend 进行一些 ETL 操作,我试图使用三元运算符进行一些逻辑工作,但从 talend 中得到 nullpointer
异常。
我想做什么 - 我的源数据库在 table 中有一个名为“time_zone”的整数类型的列,包含 Enum like- 1,2,3,4.....12 in destination table 我想用一些字符串替换它们就像是值是 0 我想写“EST_GMT_0”我的目的地 table.
我尝试了什么 - 早些时候我尝试了一种有效的方法,但现在我发现该方法存在一些问题 -
String.valueOf(row12.time_zone).replace("0","AST_GMT_4").replace("1","EST_GMT_5").replace("2","CST_GMT_6").replace("3","MST_GMT_7").replace("4","PST_GMT_8").replace("5","AST_GMT_9").replace("6","HST_GMT_10").replace("7","ADT_GMT_3").replace("8","EDT_GMT_4").replace("9","CDT_GMT_5").replace("10","ADT_GMT_6").replace("11","ADT_GMT_7").replace("12","ADT_GMT_8")
早些时候我是这样做的,但这里的问题是输出不会像预期的那样它还会替换最后替换的字符串,因为替换的字符串包含数字,如 EDT_GMT_4
replace 方法再次将 4 替换为一些其他字符串值等等,直到它不会对更高的值做出反应,结果最终输出变成 - MST_GMT_ADT_GMT_MST_GMT_7
像这样
我尝试过的其他方法 -
String.valueOf(row12.time_zone).equals("0")?String.valueOf(row12.time_zone).replace("0","ZERO"):String.valueOf(row12.time_zone).equals("1")?String.valueOf(row12.time_zone).replace("1","One"):String.valueOf(row12.time_zone).equals("2")?String.valueOf(row12.time_zone).replace("2","Two"):String.valueOf(row12.time_zone).equals("3")?String.valueOf(row12.time_zone).replace("3","Three"):String.valueOf(row12.time_zone).equals("4")?String.valueOf(row12.time_zone).replace("4","Four"):String.valueOf(row12.time_zone).equals("5")?String.valueOf(row12.time_zone).replace("5","Five"):String.valueOf(row12.time_zone).equals("6")?String.valueOf(row12.time_zone).replace("6","Six"):String.valueOf(row12.time_zone).equals("7")?String.valueOf(row12.time_zone).replace("7","Seven"):String.valueOf(row12.time_zone).equals("8")?String.valueOf(row12.time_zone).replace("8","Eight"):String.valueOf(row12.time_zone).equals("9")?String.valueOf(row12.time_zone).replace("9","Nine"):row12.time_zone.equals("10")?String.valueOf(row12.time_zone).replace("10","Ten"):String.valueOf(row12.time_zone).equals("11")?String.valueOf(row12.time_zone).replace("11","Eleven"):String.valueOf(row12.time_zone).equals("12")?String.valueOf(row12.time_zone).replace("12","Twelve"):String.valueOf(row12.time_zone)
这是我尝试的第二种方法,但得到了 NullPointerException
如何解决这个问题?
在您的其他方法中,对于值十 (10) 替换,您忘记应用相同的 java 方法 String.valueOf() 将整数转换为字符串,然后才能进行比较测试。您的某些输入行(整数类型)为空,您不能直接将字符串 equals 方法应用于这些行。
所以,你的三元运算的那部分
:row12.time_zone.equals("10")?String.valueOf(row12.time_zone).replace("10","Ten")
应该是这个(和其他行一样)
:String.valueOf(row12.time_zone).equals("10")?String.valueOf(row12.time_zone).replace("10","Ten")
我正在使用 talend 进行一些 ETL 操作,我试图使用三元运算符进行一些逻辑工作,但从 talend 中得到 nullpointer
异常。
我想做什么 - 我的源数据库在 table 中有一个名为“time_zone”的整数类型的列,包含 Enum like- 1,2,3,4.....12 in destination table 我想用一些字符串替换它们就像是值是 0 我想写“EST_GMT_0”我的目的地 table.
我尝试了什么 - 早些时候我尝试了一种有效的方法,但现在我发现该方法存在一些问题 -
String.valueOf(row12.time_zone).replace("0","AST_GMT_4").replace("1","EST_GMT_5").replace("2","CST_GMT_6").replace("3","MST_GMT_7").replace("4","PST_GMT_8").replace("5","AST_GMT_9").replace("6","HST_GMT_10").replace("7","ADT_GMT_3").replace("8","EDT_GMT_4").replace("9","CDT_GMT_5").replace("10","ADT_GMT_6").replace("11","ADT_GMT_7").replace("12","ADT_GMT_8")
早些时候我是这样做的,但这里的问题是输出不会像预期的那样它还会替换最后替换的字符串,因为替换的字符串包含数字,如 EDT_GMT_4
replace 方法再次将 4 替换为一些其他字符串值等等,直到它不会对更高的值做出反应,结果最终输出变成 - MST_GMT_ADT_GMT_MST_GMT_7
像这样
我尝试过的其他方法 -
String.valueOf(row12.time_zone).equals("0")?String.valueOf(row12.time_zone).replace("0","ZERO"):String.valueOf(row12.time_zone).equals("1")?String.valueOf(row12.time_zone).replace("1","One"):String.valueOf(row12.time_zone).equals("2")?String.valueOf(row12.time_zone).replace("2","Two"):String.valueOf(row12.time_zone).equals("3")?String.valueOf(row12.time_zone).replace("3","Three"):String.valueOf(row12.time_zone).equals("4")?String.valueOf(row12.time_zone).replace("4","Four"):String.valueOf(row12.time_zone).equals("5")?String.valueOf(row12.time_zone).replace("5","Five"):String.valueOf(row12.time_zone).equals("6")?String.valueOf(row12.time_zone).replace("6","Six"):String.valueOf(row12.time_zone).equals("7")?String.valueOf(row12.time_zone).replace("7","Seven"):String.valueOf(row12.time_zone).equals("8")?String.valueOf(row12.time_zone).replace("8","Eight"):String.valueOf(row12.time_zone).equals("9")?String.valueOf(row12.time_zone).replace("9","Nine"):row12.time_zone.equals("10")?String.valueOf(row12.time_zone).replace("10","Ten"):String.valueOf(row12.time_zone).equals("11")?String.valueOf(row12.time_zone).replace("11","Eleven"):String.valueOf(row12.time_zone).equals("12")?String.valueOf(row12.time_zone).replace("12","Twelve"):String.valueOf(row12.time_zone)
这是我尝试的第二种方法,但得到了 NullPointerException
如何解决这个问题?
在您的其他方法中,对于值十 (10) 替换,您忘记应用相同的 java 方法 String.valueOf() 将整数转换为字符串,然后才能进行比较测试。您的某些输入行(整数类型)为空,您不能直接将字符串 equals 方法应用于这些行。
所以,你的三元运算的那部分
:row12.time_zone.equals("10")?String.valueOf(row12.time_zone).replace("10","Ten")
应该是这个(和其他行一样)
:String.valueOf(row12.time_zone).equals("10")?String.valueOf(row12.time_zone).replace("10","Ten")