Java 字符串索引超出范围异常:字符串索引超出范围:38

Java 字符串索引超出范围异常:字符串索引超出范围:38,java,hadoop,Java,Hadoop,正如标题所述,我在使用hadoop时收到了一个“字符串索引越界异常”。以下是我的地图工作: 公共类UniversityMap扩展MapReduceBase实现Mapper{ 私有文本字=新文本(); 公共void映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)引发IOException { 字符串行=value.toString(); 字符串分离=行。子字符串(34,38); String people=line.substring(44,

正如标题所述,我在使用hadoop时收到了一个“字符串索引越界异常”。以下是我的地图工作:

公共类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个字符。