2016-04-03 62 views
1

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

谢谢

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

'#字符串的最佳方式contains'不要把一个正则表达式 –

+0

'String.contains'不使用正则表达式。您的代码查找确切的字符串'[\\ p {Punct}]' –

回答

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 
+0

当我运行System.out.println(punc)时,我的输出仍然显示为0;我在某处做错了吗? – Who

+0

@谁没有看到你的代码很难说。我编辑了我的答案以显示更完整的解决方案。这有帮助吗? –

+0

扫描仪扫描仪=新扫描仪(System.in); System.out.println(“请在下面输入一个句子\ n \ n”); 我在提示用户输入他们想要的任何句子,您提供的示例有一个修复输入。当我运行System.out.println(“Punctuation:”+ punc); 输出仍然是0. 感谢您的帮助,哥们。 – Who

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 
0

您正在执行的命令:

if(sentence.contains("[\\p{Punct}]")){ 
    punc++; 
} 

,这意味着每个字符“如果句子中包含标点,再加入1到标点符号柜台”一次。因此,如果句子包含任何标点符号,结果将是句子的长度,而不是标点符号的数量。

也许使用

if (Pattern.matches("\\p{Punct}", chr)) { 
    punc++; 
} 

哪里chr是包含当前字符的字符串。

这样,你每次检查单个字符而不是整个句子。

0

如果您不想修改你的代码太多,那么你可以使用

int digit = 0, letter = 0, punc = 0; 
char c; 
String sentence = "abc, (kl{}"; 

for (int a = 0; a<sentence.length(); a++){ 
    c=sentence.charAt(a); 

    if(Character.isLetter(c)) 
     letter++; 

    if(Character.isDigit(c)) 
     digit++; 

    if(("" + c).matches("[\\p{Punct}]")){ 
     punc++; 
    }  
} 
System.out.println(punc); 
} 

IDEONE DEMO

不完全是,虽然

相关问题