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}
在All line中包括" {"和"}"字符。我想在这些角色之间填写上下文。但我在编译期间得到java.lang.StringIndexOutOfBoundsException
。
我应该如何更改我的代码?为什么我会收到错误?
感谢。
答案 0 :(得分:0)
根据您提供的代码,有两种方法可以获得java.lang.StringIndexOutOfBoundsException
{
和}
在您正在投放的输入中不平衡。{
和}
的情况。因为,如果值不存在,则left
和right
变量将变为-1
。因此,您获得StringIndexOutOfBoundsException
所以,您应该更改的代码是这样的:
//......
int left = line.indexOf("{");
int right = line.indexOf("}");
if(left > 0 && right > 0){
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));
}
}
//..........