如何摆脱字符串输入



当我尝试在字符串上执行一些操作时,我的tmap有一个问题。我有一个具有AD_SET_NAME的CSV,在某些行中,单元格中有更多行。我使用以下内容:

row4.Ad_Set_Name.contains(" ") ? row4.Ad_Set_Name.substring(0,row4.Ad_Set_Name.indexOf(" ")) : row4.Ad_Set_Name
row4.Ad_Set_Name.contains(""") ? row4.Ad_Set_Name.substring(row4.Ad_Set_Name.indexOf(""")+1,row4.Ad_Set_Name.lastIndexOf(""")) : "null"

我说的是ad_set_name"其他vc_7days"。因此,在这种情况下,第一行将给我"其他",第二行将给我"无效"。ad_set_name ="其他VC_7DAYS"某物"第三行"将返回"其他"和第二个"某物"。但是当我有ad_set_name =

"其他

事物"我有一个索引错误,例如:" StringIndexoutofBoundSexception:字符串索引超出范围:-1"知道为什么这是什么?非常感谢!

错误记录是:

Exception in component tMap_1 (facebook_campaigns_amazon_us)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at mava2.facebook_campaigns_amazon_us_0_1.facebook_campaigns_amazon_us.tFileInputDelimited_2Process(facebook_campaigns_amazon_us.java:4649)
    at mava2.facebook_campaigns_amazon_us_0_1.facebook_campaigns_amazon_us.tWaitForFile_1Process(facebook_campaigns_amazon_us.java:2322)
    at mava2.facebook_campaigns_amazon_us_0_1.facebook_campaigns_amazon_us.tMysqlConnection_1Process(facebook_campaigns_amazon_us.java:856)
    at mava2.facebook_campaigns_amazon_us_0_1.facebook_campaigns_amazon_us.runJobInTOS(facebook_campaigns_amazon_us.java:5905)
    at mava2.facebook_campaigns_amazon_us_0_1.facebook_campaigns_amazon_us.main(facebook_campaigns_amazon_us.java:5575)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1

告诉我们,有一个不包含您想要的字符的非挂钩字符串。

在您的情况下,当有(whitespace(或 "Other

时,它可能发生

使用Java复制它看起来像这样:

String test = ""Other nnthings"";
test = test.contains(" ") ? test.substring(0, test.indexOf(" ")) : test;
System.out.println(test); // "Other

System.out.println(test.contains(""") ?
     test.substring(test.indexOf(""")+1,test.lastIndexOf(""")) : "null"); // error!

您会遇到错误,因为到第二个验证运行时,字符串为 StringIndexOutOfBoundsException,这意味着

test.contains(""") ? test.substring(test.indexOf(""")+1,test.lastIndexOf(""")) : "null"

实际上解决了

test.contains(" "(?test.substring(0 1,0(:" null"

,如Javadoc所指定的

indexoutofBoundSexception-如果BeginIndex为负,或者EndIndex大于此字符串对象的长度,或者BeginIndex大于EndIndex。

在您的情况下,BeginIndex为1,而EndIndex为0,这就是"被抛出的原因。

防止该错误被投掷,而不是使用

row4.Ad_Set_Name.contains(""")

使用

row4.Ad_Set_Name.indexOf('"', 2) != -1

将确保您的字符串至少有2个字符CC_5的出现。

我解决了问题。在tfileInputDelimited元素中,我没有检查CSV选项。因为塔伦德(Talend

相关内容

  • 没有找到相关文章

最新更新