我有一个赋值,它需要构建一个遍历单词ArrayList的函数,并找到句子的平均长度。 我的函数通过了3个测试中的2个,最后一个没有通过,因为我正在搜索的标点符号被删除,因为它在ArrayList插槽中独立,并在使用名为cleanUp的标点符号删除函数时被删除。这有点难以解释,所以我将展示代码的所有相关部分。
print(my_list.remove_from_tail().get_data())
未通过的测试:
static String cleanUp(String str) {
Pattern p = Pattern.compile("(\\W*)(.*?)(\\W*)");
Matcher m = p.matcher(str);
m.matches();
return str.substring(m.end(1), m.end(2)).toLowerCase();
}
static double averageSentenceLength(ArrayList<String> text) {
double sentences = 0;
double realLength = 0;
boolean doublePunctuation = false;
for(int i = 0; i < text.size(); i++){
if(cleanUp(text.get(i)).length() != 0) {
realLength++;
if(text.get(i).substring(text.get(i).length()-1).equals( "." ) ||
text.get(i).substring(text.get(i).length()-1).equals( "!" ) ||
text.get(i).substring(text.get(i).length()-1).equals( "?" ))
sentences++;
}
}
return realLength / sentences;
}
问题的发生是因为“王”之后的问号没有被计算,因此平均句子长度是应该的两倍。
答案 0 :(得分:0)
在cleanup()
方法中,str.substring(m.end(1), m.end(2)).toLowerCase()
在处理?
字符串时返回一个空字符串,因此if
的正文永远不会被执行:
if(cleanUp(text.get(i)).length() != 0) {
realLength++;
if(text.get(i).substring(text.get(i).length()-1).equals( "." ) ||
text.get(i).substring(text.get(i).length()-1).equals( "!" ) ||
text.get(i).substring(text.get(i).length()-1).equals( "?" ))
sentences++;
}