我正在尝试从用户输入中读取并从句子中计算标点符号并将其打印出来。任何人都可以指导我这样做的正确方法。我的代码无法正常工作。
谢谢
int digit = 0, letter = 0, punc = 0;
char c;
for (int a = 0; a<sentence.length(); a++){
c=sentence.charAt(a);
if(Character.isLetter(c))
letter++;
if(Character.isDigit(c))
digit++;
if(sentence.contains("[\\p{Punct}]")){
punc++;
}
}
答案 0 :(得分:3)
由于String#contains
不使用正则表达式,因此您需要使用其他方法来计算标点符号。
使用Pattern
和Matcher
Pattern p = Pattern.compile("[\\p{Punct}]");
Matcher m = p.matcher("Hi, I'm testing the Regex Expression !");
while (m.find()) {
punc++;
}
System.out.println(punc); // 3
答案 1 :(得分:0)
您正在执行命令:
IO [()]
表示如果句子包含标点符号,则将1添加到标点符号计数器&#39;每个角色一次。因此,如果句子中包含任何标点符号,则结果将是句子的长度,而不是标点符号的数量。
也许使用
if(sentence.contains("[\\p{Punct}]")){
punc++;
}
其中if (Pattern.matches("\\p{Punct}", chr)) {
punc++;
}
是包含当前字符的字符串。
这样,您每次都会检查单个字符而不是整个句子。
答案 2 :(得分:0)
如果您将所有非字母,非数字和非空格视为标点符号,那么这可能对您有用:
public static void main(String[] args) {
int digit = 0, letter = 0, punc = 0;
char c;
Scanner scanner = new Scanner (System.in);
System.out.println("Please enter a sentence below \n\n");
String sentence = scanner.nextLine();
scanner.close();
for (int a = 0; a < sentence.length(); a++) {
c = sentence.charAt(a);
if (Character.isLetter(c))
letter++;
if (Character.isDigit(c))
digit++;
if (!Character.isLetterOrDigit(c) && !Character.isWhitespace(c)) {
punc++;
}
}
System.out.println("Letters: " + letter);
System.out.println("Numbers: " + digit);
System.out.println("Punctuation: " + punc);
}
产生输出:
Letters: 10
Numbers: 1
Punctuation: 1
答案 3 :(得分:0)