使用正则表达式计算用户输入的标点符号并将其打印出来

时间:2016-04-03 09:29:40

标签: java regex

我正在尝试从用户输入中读取并从句子中计算标点符号并将其打印出来。任何人都可以指导我这样做的正确方法。我的代码无法正常工作。

谢谢

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

4 个答案:

答案 0 :(得分:3)

由于String#contains不使用正则表达式,因此您需要使用其他方法来计算标点符号。

使用PatternMatcher

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)

如果您不想过多地修改代码,则可以使用

[&]

<强> IDEONE DEMO

不是最好的方式