使用ArrayList和循环计算文本文件中的标点符号是不能正常工作的,如何修复?

时间:2015-08-18 06:55:31

标签: java loops arraylist

解决。

我正在尝试计算文本文件中有多少个标点符号。我正在使用if语句来计算每个标点符号的数量并且似乎不起作用,它表示每个元素都是句号。

这是我的循环

$output = array();
exec('java workspace/itext/src/itext/CheckFonts 2>&1',$output);
print_r($output);

这是输出。

    for (int c = 0; c <= punk1.size()-1; c++) {
        if (punk1.get(c).matches(".")) {
            fullstop += 1;
        } else if (punk1.get(c).matches(",")) {
            comma += 1;
        } else if (punk1.get(c).matches("?")) {
            qmark += 1;
        } else if (punk1.get(c).matches("!")) {
            expoint += 1;
        } else if (punk1.get(c).matches("\"")) {
            doublequote += 1;
        } else if (punk1.get(c).matches("\'")){
            singlequote += 1;
        } else {
            System.out.println("Punctuation Marks not Found");
        }
    }

每个应该有3个。

3 个答案:

答案 0 :(得分:4)

您使用的是使用正则表达式匹配的matches。因为&#39;。&#39;如果条件始终为真,则匹配任何字符。

答案 1 :(得分:3)

.matches方法将正则表达式作为参数。在您的情况下,问题是句点字符是正则表达式语法中的特殊字符,这意味着匹配任何字符,因此,您的第一个if声明将永远成立。

要解决此问题,您只需将punk1.get(c).matches(".")替换为punk1.get(c).matches("\\.")即可。这将转义句点字符,以便匹配字面

或者,您可以使用contains方法,它将按原样使用字符串。

答案 2 :(得分:1)

将match关键字与regex表达式一起使用时,应该注意正则表达式。

您必须使用反斜杠转义. ? "'

请尝试以下代码:

for (int c = 0; c <= punk1.size()-1; c++) {
    if (punk1.get(c).matches("\\.")) {
        fullstop += 1;
    } else if (punk1.get(c).matches(",")) {
        comma += 1;
    } else if (punk1.get(c).matches("\\?")) {
        qmark += 1;
    } else if (punk1.get(c).matches("!")) {
        expoint += 1;
    } else if (punk1.get(c).matches("\"")) {
        doublequote += 1;
    } else if (punk1.get(c).matches("\'")){
        singlequote += 1;
    } else {
        System.out.println("Punctuation Marks not Found");
    }
}

或者,您也可以使用equals进行比较。