编写一个程序,接受用户输入的一段英文文字,统计出其中的字符个数、单词个数和句子的个数。(设句子以“.”“!”“?”结束,单词之间利用空格分隔)。

这个题目用到正则表达式,正则表达式是一种可以用于模式匹配和替换的规范.

字符串对象(String)调用matches()可以判断当前字符串对象是否与参数regex指定的正则表达式匹配.

String上可以使用正则表达式的操作,实际上是利用了java.util.regex.Pattern与java.util.regex.Matcher的功能.当调用String的matches()方法时,实际上是调用了Pattern的静态方法matches(),这个方法会返回boolean值,表示字符串是否符合正则表达式.

将正则表达式视为一个对象来重复使用,使用pattern的静态方法compile()进行编译.这个方法会返回一个Pattern的实例,这个实例代表正则表达式,之后可以重复使用Pattern实例的matcher()方法来返回一个Matcher的实例,代表符合正则表达式的实例.

 1 import java.util.Scanner;
 2 import java.util.regex.Matcher;
 3 import java.util.regex.Pattern;
 4 
 5 public class Test5_1 {
 6 public static void main(String[] args){
 7 int countC=0,countW=0,countS=0;          //分别表示字符,单词和句子的个数
 8 Scanner in=new Scanner(System.in);
 9 System.out.print("input a english sentence:");
10 String st=in.nextLine();                //用nextInt接收,是以回车作为分隔符.而用next接受,是以空格作为分隔符.
11 Pattern p2=Pattern.compile("[ ,.!?]");          //与[]中的任意一个字符匹配即可.分别有空格,逗号,句号,感叹号,问号.用以统计单词个数.
12 Matcher m2=p2.matcher(st);             
13 Pattern p1=Pattern.compile("[a-zA-Z ,.!?]");        //匹配一段话中字符的个数
14 Matcher m1=p1.matcher(st);
15 Pattern p3=Pattern.compile("[.!?]");            //匹配一段话中句子的个数
16 Matcher m3=p3.matcher(st);
17 boolean result2=m2.find();                
18 while(result2){
19 countW++;
20 result2=m2.find();                    //判断是否找到并统计个数
21 }
22 boolean result1=m1.find();
23 while(result1){
24 countC++;
25 result1=m1.find();
26 }
27 boolean result3=m3.find();
28 while(result3){
29 countS++;
30 result3=m3.find();
31 }
32 System.out.println("单词个数:"+countW);
33 System.out.println("字符个数:"+countC);
34 System.out.println("句子个数:"+countS);
35 }
36 }