我正在写一个MapReduce工作,用于在Facebook上寻找普通朋友。
这是我的映射器的输入:
SETX FOO bar
这是我的映射器代码的一部分:
100, 200 300 400 500 600
200, 100 300 400
300, 100 200 400 500
400, 100 200 300
500, 100 300
600, 100
当我执行此操作时,我在map{
String line = value.toString();
String[] LineSplits = line.split(",");
String[] friends = LineSplits[1].trim().split(" ");
for(int i =0; i<friends.length;i++) {
int friend2 = Integer.parseInt(friends[i]);
System.out.println(friend2);
}
int friend1 = Integer.parseInt(LineSplits[0]);
System.out.println(friend1);
}
中获得了正确的值。 (friend2
在这里正常工作)。变量friend1应该将值设为“100”。但是Intege.parseInt
无效,我收到的错误是这样的:
Integer.ParseInt
所以我被困在这里。为什么我会为此获取NumberFormatException?我该如何纠正这个问题?
答案 0 :(得分:6)
您的文件包含无效的Unicode字符&#39; ZERO WIDTH NO-BREAK SPACE&#39; (U + FEFF)。你需要摆脱它。
该角色不可见。所以你没有意识到它就在那里是可以理解的。你可能错误地复制粘贴在那里。您必须查看从中复制数据的位置。
我应该提一下,在代码中修剪你的字符串并不能解决这个问题。你真的需要进入输入文件并从那里修复它。
您可以找到有关如何摆脱此thread中字符的建议。
否则,如果您的文件不是太大,为什么不启动一个全新的文件,并手动输入您的值以确保安全。 :)
答案 1 :(得分:0)
编辑:正如您在评论中提到的,您获得的长度为4
也许你可以尝试一下。
LineSplits[0].replace(u'\ufeff', '')
,然后尝试解析并查看会发生什么
如果你看一下Integer.parseInt() jsl 它说
Throws: NumberFormatException - if the string does not contain a parsable integer.
那么当string: "100"
到达ENDOFLINE时会发生什么。它可以具有字符,如\ r \ n或\ n,如line termination
或null
,如果已达到流的末尾,显然不是“可解析的”整数“即可。因此,您需要在解析之前检查这些内容。