解决。
我正在尝试计算文本文件中有多少个标点符号。我正在使用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个。
答案 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
进行比较。