public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
int left = line.indexOf("{");
int right = line.indexOf("}");
String subMyString = line.substring(left+1, right);
for (String myWord : subMyString.split("\\W+")) {
if (myWord.length() > 0)
context.write(new Text(myWord), new IntWritable(1));
}
}
在我的mapper.class
以及我的输入文件:
...
...bla..bla..{asd assda sddsaasd asd}
...bla..bla..{asd assda sddsaasd asd}
...bla..bla..{asd assda sddsaasd asd}
...
自然地: line= ...bla..bla..{asd assda sddsaasd asd}
所有行中都包含“{”和“}”字符。我想在这些字符之间填入上下文。但我越来越 java.lang.StringIndexOutOfBoundsException
在编译过程中。
我该如何更改代码?为什么我会出错?
谢谢。
1条答案
按热度按时间i86rm4rw1#
从您提供的代码中,有两种方法可以获得
java.lang.StringIndexOutOfBoundsException
这个{
以及}
在您运行的输入中不平衡。如果没有
{
以及}
在中,值未被处理。因为,如果它们不存在于值中left
以及right
变量变成-1
. 因此你得到一个StringIndexOutOfBoundsException
因此,您应该更改的代码如下: