使用arrayLists查找平均句子长度的函数

时间:2017-01-31 01:17:33

标签: java arraylist

我有一个赋值,它需要构建一个遍历单词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;
}

问题的发生是因为“王”之后的问号没有被计算,因此平均句子长度是应该的两倍。

1 个答案:

答案 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++;
}