首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Talen中使用三元操作符时的空指针异常

在Talen中使用三元操作符时的空指针异常
EN

Stack Overflow用户
提问于 2021-11-11 10:35:16
回答 1查看 73关注 0票数 0

我正在使用talend进行一些ETL操作,我试图使用三元操作符进行一些逻辑工作,但从talend获得nullpointer异常。

我想做什么-我有一个源数据库,它在表中有一个名为"time_zone“的整数类型的列,其中包含Enum 1,2,3,4.12在目标表中,我想用一些字符串来替换它们--我想要在目标表中写入"EST_GMT_0”的值是0。

我尝试了什么,-之前我尝试过一种有效的方法,但现在我发现了一些问题-

代码语言:javascript
复制
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替换方法)再次用其他字符串值替换4,直到它不会响应更高的值,结果最终的输出变成- MST_GMT_ADT_GMT_MST_GMT_7

其他我试过的方法-

代码语言:javascript
复制
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

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-12 12:30:43

在另一种方法中,对于值10 (10)替换,您忘了在通过比较测试之前应用相同的java方法String.valueOf()将整数转换为字符串。您的一些输入行(整数类型)为null,您不能直接将字符串等于方法应用于这些行。

所以,你那部分的三值运算

代码语言:javascript
复制
:row12.time_zone.equals("10")?String.valueOf(row12.time_zone).replace("10","Ten")

应该是这个(和其他行一样)

代码语言:javascript
复制
:String.valueOf(row12.time_zone).equals("10")?String.valueOf(row12.time_zone).replace("10","Ten")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69926818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档