A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jwx555 于 2014-7-11 20:12 编辑

如了个题,想做一个输入年份就打印当年2月的天数这样的一个小程序
代码如下:
  1. import java.io.* ;
  2. import java.util.*;
  3. class Input
  4. {
  5.         public static void main(String[] args)  throws IOException{
  6.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
  7.                 StringBuilder strBuilder = new StringBuilder() ;
  8.                
  9.                 int ch = 0 ;

  10.                 while (true)
  11.                 {
  12.                         ch = br.read() ;

  13.                         if (ch == '\r')
  14.                         {
  15.                                 continue ;
  16.                         }
  17.                         if (ch == '\n')
  18.                         {
  19.                                 String s = strBuilder.toString() ;
  20.                                 if ("exit".equals(s))
  21.                                 {
  22.                                         break ;
  23.                                 }
  24.                                 int year = Integer.parseInt(s) ;
  25.                                 showDays(year) ;
  26.                                 strBuilder.delete(0,strBuilder.length()) ;
  27.                         }else
  28.                                 strBuilder.append((char)ch) ;
  29.                 }
  30.         }

  31.         private static void showDays(int year) {
  32.                 Calendar c=Calendar.getInstance();
  33.                 c.set(year, 2, 1);
  34.                 c.add(Calendar.DAY_OF_MONTH, -1);
  35.                 int days=c.get(Calendar.DAY_OF_MONTH);
  36.                 System.out.println(days);
  37.         }
  38. }
复制代码

如果只输入数字没问题,但是输入其他字符会报错
  1. Exception in thread "main" java.lang.NumberFormatException: For input string: "o
  2. ver"
  3.         at java.lang.NumberFormatException.forInputString(Unknown Source)
  4.         at java.lang.Integer.parseInt(Unknown Source)
  5.         at java.lang.Integer.parseInt(Unknown Source)
  6.         at Input.main(Input.java:26)
复制代码

我希望程序能更健壮些,求解决办法


评分

参与人数 1技术分 +1 收起 理由
淡夜清风 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
用正则表达式判断吧
回复 使用道具 举报
String line = br.readLine();
line.matches("\\d+")   //看line字符串,是否是纯数字,这里使用的是正则表达式,楼主不清楚的话,可以网上百度
                                   如果匹配返回true,否则返回false
回复 使用道具 举报
爨庚轩 发表于 2014-7-11 20:46
String line = br.readLine();
line.matches("\\d+")   //看line字符串,是否是纯数字,这里使用的是正则表 ...

正则表达式啊,这个清楚。谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马