我试图打破记录成字的非字母数字字符的基础上,计数每个字的第一个字母,并得到每个字的第一个字母出现的总数。下面是我试图执行的Map器类逻辑。
public void map(LongWritable key, Text value, Context ctx) {
String line = value.toString();
String[] split = line.split("\\W+");
String firstChar;
for(String words: split) {
firstChar = String.valueOf(words.charAt(0));
try {
ctx.write(new Text(firstChar), new IntWritable(1));
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
例外情况:
Error: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at com.hadoopexp.mapper.MapperClass.map(MapperClass.java:17)
at com.hadoopexp.mapper.MapperClass.map(MapperClass.java:1)
但是我得到了stringindexoutofbounds异常,该逻辑在第行:
firstChar = String.valueOf(words.charAt(0));
我在输入文件中放了一些空行,看看是否有效((如下所示)
Liverpool
Manchester
London
Toronto ? ?? !!12 32
有谁能帮我修正逻辑吗。非常感谢您的帮助。
1条答案
按热度按时间oknwwptz1#
拆分空字符串将返回一个数组,其中包含空字符串的单个元素。我只是明确地检查一下: