我正在使用talend进行一些ETL操作,我试图使用三元操作符进行一些逻辑工作,但从talend获得nullpointer异常。
我想做什么-我有一个源数据库,它在表中有一个名为"time_zone“的整数类型的列,其中包含Enum 1,2,3,4.12在目标表中,我想用一些字符串来替换它们--我想要在目标表中写入"EST_GMT_0”的值是0。
我尝试了什么,-之前我尝试过一种有效的方法,但现在我发现了一些问题-
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。
其他我试过的方法-
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
如何解决这个问题?
发布于 2021-11-12 12:30:43
在另一种方法中,对于值10 (10)替换,您忘了在通过比较测试之前应用相同的java方法String.valueOf()将整数转换为字符串。您的一些输入行(整数类型)为null,您不能直接将字符串等于方法应用于这些行。
所以,你那部分的三值运算
: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")https://stackoverflow.com/questions/69926818
复制相似问题