字符串索引超出范围:-1错误

时间:2014-06-25 16:52:27

标签: java hadoop emr

String Index Out of Range:-1是我在hadoop MR中的mapper中执行此代码时得到的错误。

    String line = value.toString();
    String[] longLatArray = line.split(",");
    double lat = Double.parseDouble((longLatArray[0]).substring(1));

行看起来像这样:“( - 21.24132363125682,-175.14134768396616,1)”

我的目标是删除第一个“(”并将-21.2873623添加到我的lat变量中。

编辑:

当我尝试在hadoop界面中调试时,这就是我得到的:

attempt_201406251613_0002_m_000000_0: line: (-21.24132363125682,-175.14134768396616,1)
attempt_201406251613_0002_m_000000_0: index 0
attempt_201406251613_0002_m_000000_0: (-21.24132363125682
attempt_201406251613_0002_m_000000_0: index 1
attempt_201406251613_0002_m_000000_0: -175.14134768396616
attempt_201406251613_0002_m_000000_0: index 2
attempt_201406251613_0002_m_000000_0: 1)

当我在本地执行非常相似的代码时,我没有收到任何错误

此外,这里-1的意义是什么?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

public static void main(String[] args) throws Exception {

    String value="(-21.2873623,160.2323,1)";
    String line = value.toString();
    String[] longLatArray = line.split(",");
    double lat = Double.parseDouble((longLatArray[0]).substring(1));
    System.out.println(lat);
}

这对我来说是有效的,给我value中的坐标。这让我相信value中的任何内容都存在问题。您确定该值包含您期望的值吗?您可以通过执行以下操作进行调试:

System.out.println(value); // or use a logging library

并验证。 -1让我相信你已经超越了字符串的结尾,但我不是100%肯定的。

答案 1 :(得分:0)

 indexOf() returns -1 when the argument can't be found. It Might be the root Cause.    

 Reproducible code   
String value="";         
String line = value.toString();     
String[] longLatArray = line.split(",");        
double lat = Double.parseDouble((longLatArray[0]).substring(1)); 
System.out.println(lat);