黑马程序员技术交流社区

标题: 正则表达式。 [打印本页]

作者: 王德升    时间: 2012-7-14 22:39
标题: 正则表达式。
本帖最后由 王德升 于 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));
}

作者: 陆强强    时间: 2012-7-14 22:58
第一问: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中的任意一个字符
作者: 游兴钟    时间: 2012-7-15 21:28
陆强强 发表于 2012-7-14 22:58
第一问:String regex = "[1-9] [0-9] {4,10}";//4和10是指[0-9]重复四到十次
第二问:char[] arr = qq.t ...


这里的字符比较的是在代码表中所对应的数字大小 而不是你说的比较自然顺序 如果比较自然顺序就不该用>  而是调用compareTo方法了
作者: 王飞    时间: 2012-7-15 21:53
第一问。
//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));
}
作者: 杨康    时间: 2012-7-15 22:51
[1-9] 控制第一位的格式必须为1-9这9个数字
[0-9]第二位是0-9的数字
{4.10}从第二位开始可以出现的次数是至少4次,至多10次
这样判断下来qq号的位数确定在4位到10位




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2