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的意义是什么?
非常感谢任何帮助!
答案 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);