/** * 分别用String类方法和正则表达式校验QQ号码是否合法 * QQ号码要求: * 6-10位,必须是数字、开头不能为0 * @author yajun * */ public class QQCheck { String[] qqNums=new String[5]; /** * 组合字符串方法来校验QQ号码的合法性 */ private String checkQQ1(String qqNum){ String message = null; char[] chArr; boolean flag=true; if(qqNum.length()>=6&&qqNum.length()<=10){ chArr=qqNum.tochararray(); for(char ch:chArr){ //如果发现非法字符,则将flag置为flase,退出循环 //if(!(ch>=0&&ch<=9)){//!!!Error,这句话是错误的!!! if(!(ch>='0'&&ch<='9')){//疑问:用不用加括号呢?!运算符的优先级如何??加括号会不会影响效率呢?? flag=false; break; } } if(flag){ if(!qqNum.startsWith("0")){ message=qqNum+":QQ号码合法"; }else{ message=qqNum+":QQ号码以零开头不合法"; } }else{ message=qqNum+":QQ号码有非法字符不合法"; } }else{ message=qqNum+":QQ号码过长或过短不合法"; } return message; } @Test public void testCheckQQ1() { for(String qqNum:qqNums){ System.out.println(checkQQ1(qqNum)); } } /** * 用Long.parseLong方法校验QQ号码是否有非法字符 */ private String checkQQ2(String qqNum){ String message = null; if(qqNum.length()>=6&&qqNum.length()<=10){ try{ Long.parseLong(qqNum);//parseLong与valueOf有什么区别呢? if(!qqNum.startsWith("0")){ message=qqNum+":QQ号码合法"; }else{ message=qqNum+":QQ号码以零开头不合法"; } }catch(NumberFormatException e){ message=qqNum+":QQ号码有非法字符不合法"; } }else{ message=qqNum+":QQ号码过长或过短不合法"; } return message; } @Test public void testCheckQQ2() { for(String qqNum:qqNums){ System.out.println(checkQQ2(qqNum)); } } @Before public void init(){ String rightQQ="380970008"; String tooLongQQ="12345678912"; String tooShortQQ="12345"; String containIllegal="123ab56"; String startWithZero="0123456"; qqNums[0]=rightQQ; qqNums[1]=tooLongQQ; qqNums[2]=tooShortQQ; qqNums[3]=containIllegal; qqNums[4]=startWithZero; //qqNums={rightQQ,tooLongQQ,tooShortQQ,containIllegal,startWithZero};//这句话会出错,用{}赋值的字符串数组是常量数组 } @Test public void testInt() { System.out.println((int)(Math.pow(2,31)-1)); } }