现在的位置: 首页 > 综合 > 正文

Q2017

2013年07月20日 ⁄ 综合 ⁄ 共 1209字 ⁄ 字号 评论关闭
Problem Description
对于给定的一个字符串,统计其中数字字符出现的次数。
 


Input
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
 


Output
对于每个测试实例,输出该串中数值的个数,每个输出占一行。
 


Sample Input
2 asdfasdf123123asdfasdf asdf111111111asdfasdfasdf
 


Sample Output
6 9

做这道题时候,用String的charAt()肯定能做出来,一个一个的分析。

我想用正则做,先把字符串里的数字串提取出来,放到数组或String里,因为他们有length的方法,可以直接知道其长度。

分析正则挺麻烦,很久没用正则了,还得看《正则表达式30分钟入门教程》(每次做正则都要看一遍这个。。)

然后下了一个code architects regex tester软件进行测试。

最后找到了所用的正则表达式“\d[0-9]*\d”,测试了一下,正确!还没去OJ就开始写这篇记录。

然后发现还没OJ,出错就糗大了,然后去OJ,结果还真WA了!!

然后又在code architects regex tester上测试了一串字符串“asdfasdf123123asdfasdf8763kasd-232182mkasdj-9023kede9kd939k3d93k” 

这个字符串是包含单个数字的,再用“\d[0-9]*\d” 结果如下:

123123

8763

232182

9023

939

93

少了里面的单个的数字“9”和“3”。

再拼凑正则,测试“\d*[0-9]*\d”,输出如下:

123123

8763

232182

9023

9

939

3

93

这下正确了,修改了正则表达式再去OJ,AC~

代码如下:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Q2017 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		while (s.hasNext()) {
			int n = s.nextInt();
			for(int i = 0 ; i < n; i ++){
				String str = s.next();
				String regex = "\\d*[0-9]*\\d";
				Pattern p = Pattern.compile(regex);
				Matcher m = p.matcher(str);
				int count = 0;
				while (m.find()) {
					String str2 = m.group();
					count += str2.length();
				}
				System.out.println(count);
			}
		
		}
		s.close();

	}

}

由此可见,其他WA的程序肯定是某个细节没有考虑到,慢慢挖掘吧。。

抱歉!评论已关闭.