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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-7-14 22:39  /  1325 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-7-15 23:13 编辑

第一问。
//5到11位。
class Regex
{
public static void main(String[] args)
{
  checkQQ();
}
public static void checkQQ_1()
{
  String qq = "443545656";
  String regex = "[1-9] [0-9] {4,10}";//这里老毕说第一位是1-9,第二位是0-9,那后面的第三、第四......都不要判断了??
       //这个4-10是控制第二位出现的次数? 还是包含第二位和以后的数?4-10包含4和10吗??
  boolean flag = qq.matches(regex);
  
  if(flag)
   System.out.println(qq);
  else
   System.out.println("您输入非法字符");
}
public static void checkQQ()
{
  String qq = "2345666a6";
  int len = qq.length();
  if(len>=5 && len<=11)
  {
   if(!qq.startsWith("0"))
   {
    char[] arr = qq.toCharArray();
    boolean flag = true;
   
    for(int x=0; x<arr.length; x++)
    {
     if(! (arr[x]>'0' && arr[x]<'9'))//这里加个单引号判断是什么意思?字符??有点不太明白,希望具体点。
     {
      flag = false;
      break;
     }
    }
     if(flag)
     {
      System.out.println("qq:"+qq);
     }
     else
     {
      System.out.println("出现非法字符");
     }
   
   }
   else
   {
    System.out.println("不可以0开头");
   }
  }
  
  else
  {
   System.out.println("长度错误");
  }
}
}


第二问。
public static void checkMail()
{
  String mail = "abc12@sina.com";
  mail = "1@1.1";
  String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+([url=file://\\.[a-zA-Z]+)+]\\.[a-zA-Z]+)+";//[/url]这里[a-zA-Z0-9]是不是就是代表a-z和A-Z和0-9这些所有字母和数字的交集?
  reg = "\\w+@\\w+(\\.\\w+)+";


  System.out.println(mail.matches(reg));
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

4 个回复

倒序浏览
第一问:String regex = "[1-9] [0-9] {4,10}";//4和10是指[0-9]重复四到十次
第二问:char[] arr = qq.toCharArray();//这里是字符数组
             if(! (arr[x]>='0' && arr[x]<='9'))//所以这里是比较字符的默认顺序,顺便加个等号
第三问:[a-zA-Z0-9]是指a-z,A-Z或0-9中的任意一个字符

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
陆强强 发表于 2012-7-14 22:58
第一问:String regex = "[1-9] [0-9] {4,10}";//4和10是指[0-9]重复四到十次
第二问:char[] arr = qq.t ...


这里的字符比较的是在代码表中所对应的数字大小 而不是你说的比较自然顺序 如果比较自然顺序就不该用>  而是调用compareTo方法了

点评

我知道,我说的自然顺序是指系统默认顺序。comparaTo默认情况比较的也是对应阿斯克码表的值  发表于 2012-7-15 23:12
回复 使用道具 举报
第一问。
//5到11位。
class Regex
{
public static void main(String[] args)
{
  checkQQ();
}
public static void checkQQ_1()
{
  String qq = "443545656";
  String regex = "[1-9] [0-9] {4,10}";//这里老毕说第一位是1-9,第二位是0-9,那后面的第三、第四......都不要判断了??
       //这个4-10是控制第二位出现的次数? 还是包含第二位和以后的数?4-10包含4和10吗??
  boolean flag = qq.matches(regex);
  
  [0-9]{m,n}--------这句话的意思是中括号里面的---内容---在中括号的------后面----出现--大括号--里面的n到m次,是次数哦。  
  
  if(flag)
   System.out.println(qq);
  else
   System.out.println("您输入非法字符");
}
public static void checkQQ()
{
  String qq = "2345666a6";
  int len = qq.length();
  if(len>=5 && len<=11)
  {
   if(!qq.startsWith("0"))
   {
    char[] arr = qq.toCharArray();
    boolean flag = true;
   
    for(int x=0; x<arr.length; x++)
    {
     if(! (arr[x]>'0' && arr[x]<'9'))//这里加个单引号判断是什么意思?字符??有点不太明白,希望具体点。
     {
             你arry[]里面装的是字符数组,既然是字符和字符进行大小比较,那么'0','9'也必须加上单引号'',因为只有字符用''单引号括起来的
             因为是大小的比较,那么运算时都自动转换成了整数来算,因为每个字符都有自己对应的数值

              
      flag = false;
      break;
     }
    }
     if(flag)
     {
      System.out.println("qq:"+qq);
     }
     else
     {
      System.out.println("出现非法字符");
     }
   
   }
   else
   {
    System.out.println("不可以0开头");
   }
  }
  
  else
  {
   System.out.println("长度错误");
  }
}
}


第二问。
public static void checkMail()
{
  String mail = "abc12@sina.com";
  mail = "1@1.1";
  String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+([url=file://\\.[a-zA-Z]+)+]\\.[a-zA-Z]+)+";//[/url]这里[a-zA-Z0-9]是不是就是代表a-z和A-Z和0-9这些所有字母和数字的交集?[a-zA-Z0-9]表示所有字母和0到9的数字。哥,建议你去看api的正则表达式那块,都有格式的
  reg = "\\w+@\\w+(\\.\\w+)+";


  System.out.println(mail.matches(reg));
}
回复 使用道具 举报
[1-9] 控制第一位的格式必须为1-9这9个数字
[0-9]第二位是0-9的数字
{4.10}从第二位开始可以出现的次数是至少4次,至多10次
这样判断下来qq号的位数确定在4位到10位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马