Java 字符串索引超出范围异常:字符串索引超出范围:38
正如标题所述,我在使用hadoop时收到了一个“字符串索引越界异常”。以下是我的地图工作:Java 字符串索引超出范围异常:字符串索引超出范围:38,java,hadoop,Java,Hadoop,正如标题所述,我在使用hadoop时收到了一个“字符串索引越界异常”。以下是我的地图工作: 公共类UniversityMap扩展MapReduceBase实现Mapper{ 私有文本字=新文本(); 公共void映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)引发IOException { 字符串行=value.toString(); 字符串分离=行。子字符串(34,38); String people=line.substring(44,
公共类UniversityMap扩展MapReduceBase实现Mapper{
私有文本字=新文本();
公共void映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)引发IOException
{
字符串行=value.toString();
字符串分离=行。子字符串(34,38);
String people=line.substring(44,46);
int p=Integer.parseInt(人);
IntWritable p1=新的IntWritable(p);
单词。设置(离开);
输出。收集(字,p1);
}
公共静态void main(字符串[]args){
}
}
“字符串索引超出范围”:您得到的长度超过了行的长度
根据我对您的代码的理解,在以下两行中:
String depart= line.substring(34,38);
String people= line.substring(44,46);
这意味着线的长度必须为46个字符或更多。是这样吗?!所以,我想你可以检查如下:
如果(直线长度>46){
//实施你的业务。
}
如果该行无效,请跳过它
希望对您有所帮助。在创建
行的子字符串之前,您应该检查其长度。另外,为了调试,我会打印line
String depart=line.substring(34,38)的值代码>是您的错误所在。。。。调试并查看行
是什么,然后检查索引。行
必须少于38个字符。