【问题标题】:Null pointer Exception while using ternary operator in Talen Studio在 Talen Studio 中使用三元运算符时出现空指针异常
【发布时间】:2021-12-23 20:26:20
【问题描述】:

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

我想要做什么 - 我有一个源数据库,它在名为“time_zone”的表中有一个列,它是整数类型,包含枚举,如 - 1,2,3,4.. ...12 在目标表中我想用一些字符串替换这些值是 0 我想在我的目标表中写“EST_GMT_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

如何解决这个问题?

【问题讨论】:

    标签: etl talend


    【解决方案1】:

    在您的其他方法中,对于值十 (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")
    

    【讨论】:

    • 是的,感谢您指出这个问题。
    猜你喜欢
    • 2021-10-03
    • 2018-02-14
    • 1970-01-01
    • 2020-03-21
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多