正则表达式学习

关于正则表达式的使用方法:

正则表达式:符合一定规则的字符串
     A:字符
     x 字符
     \\ 反斜线字符
     \n 换行符
     \r 回车符
     
     字符类:
         [abc] 可以包含a/b/c的字符
         [^abc] 除了a/b/c,任意字符都可以
         [a-zA-Z]小写的a到z,大写的A到Z。两头字母包括在内
         [0-9] 0-9的数字都可以
         
     预定义字符类:
         .任意字符
         \d 数字[0-9]
         \w 单词字符[a-zA-Z_0-9](小写的w)

         \W指非单词字符 (大写的W)
         
     边界匹配器:
         ^行的开头
         &行的结尾
         \b 单词边界 就是是不是单词字符的地方
         
     数量词:
         x?x 可以出现一次或者一次也没有
         x*x 可以出现0次或者多次
         x+x 必须出现一次或者多次
         x{n}x 表示恰好要出现多少次 
         x{n,m} 至少出现n次,但是不能超过m次
        
代码实例:
 

   public class RegexDemo02 {
    public static void main(String[] args) {
        //创建键盘记录
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的QQ号码:");
        String qq = scanner.nextLine();
        System.out.println(checkQQ(qq));
    }
    
    public static boolean checkQQ(String qq) {
        String regex = "[1-9][0-9]{4,14}";
        regex.matches(regex);
        return qq.matches("[1-9]\\d{4,14}");
    }
}

 

———————————————————————————————————————————————————————

利用正则表达式对字符串进行切割,判断格式等等运用:

​
public static void main(String[] args) {

//1.输入学生入学日期yyyy/mm/dd

Scanner sc = new Scanner(System.in);

System.out.println("请输入学生的入学日期:\n");

String input = sc.next();

String regex = "([0-9]{1,4})/([0]?[1-9]|[0-1][1-2])/([0-9]|[1-2][0-9]|[3][0-1])";

System.out.println(input.matches(regex));

//2.一首古诗”长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山“把它分割成字符串数组(小心中文字符,中招)

String str1 = "长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山";

String regex2 = ",";

String [] str2 = str1.split(regex2);

for(int i = 0;i < str2.length;i++){

System.out.println("\n");

System.out.println(str2[i]);}

//3.有一字符串,有中文有英文有数字有$符号#符号,String s = "我fv545是gf$中#jhg8国人"

String str3 = "我fv545是gf$中#jhg8国人";

String [] str4 = str3.split("[0-9a-z#$]");

for(int n = 0;n <= str4.length;n++){

System.out.print(str4[n]);}

//4.收到一个短信,里面有多个邮箱地址,提取出来“同学你好,欢迎你来到本公司,如果是工作问题请联系张先生,邮箱是37656@qq.com,如果是生活问题,请联系李小姐,邮箱是jgbkjbybguj@sina.com.cn,如果是工资问题请联系王小姐jytfbuy@163.com”

String s = "同学你好,欢迎你来到本公司,如果是工作问题请联系张先生,邮箱是37656@qq.com,如果是生活问题,请联系李小姐,邮箱是jgbkjbybguj@sina.com.cn,如果是工资问题请联系王小姐jytfbuy@163.com";

String regex1 = "[\\w+@\\w+([.][a-z]{1-3}){1-2}";

Pattern p=Pattern.compile(regex1);

Matcher m=p.matcher(s);

while(m.find()){

System.out.println(m.group());

}

//5.我我我98765987爱爱爱爱kujyjjhkh中中中中中HGHVH国89709,进取不得有复用信息

String s1 = "我我我98765987爱爱爱爱kujyjjhkh中中中中中HGHVH国89709";

s1.split("\\w+0");

String s2 = s1.replaceAll("(.)\\1+", "$1");

System.out.println(s2);

}

然后开始学习程序执行异常该怎么弄:

分为运行异常和编译异常:

try{}catch(Exception e){}finally{}//程序继续执行时用finally

之后讲解日期的输入格式

SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd");

Date date = new Date();

sdf.Format(date);



public static void main(String[] args) {

//1.输入学生入学日期yyyy/mm/dd

Scanner sc = new Scanner(System.in);

System.out.println("请输入学生的入学日期:\n");

String input = sc.next();

String regex = "([0-9]{1,4})/([0]?[1-9]|[0-1][1-2])/([0-9]|[1-2][0-9]|[3][0-1])";

System.out.println(input.matches(regex));

//2.一首古诗”长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山“把它分割成字符串数组(小心中文字符,中招)

String str1 = "长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山";

String regex2 = ",";

接着学了异常:

分为运行异常和编译异常两大异常。

运行异常:根本原因是因为代码的不够严谨所造成的异常;

编译异常:就是编译时期出现的异常,必须处理之后程序才能运行。

当出现异常时,可以用抛出异常的方法try{}catch(){}finally{};(finally后面接着是无论是否出现异常都要继续执行的程序)

其中一个自定义异常时比较重要的一点,它是为了时出现异常的地方变得更加直观,很容易辨别出来。

代码实例:

public static void main(String[] args) {

// Demo01();

//Demo02();

Demo05();



}

//性质划分这两种

//运行异常

//编译时异常

public static void Demo01(){

//算术异常

Scanner sc = new Scanner(System.in);

System.out.println("请输入除数num1:\n");

int num1 = sc.nextInt();

System.out.println("请输入被除数num2:\n");

int num2 = sc.nextInt();

int num3 = 0;

try {

num3 = num1/num2;

}catch(ArithmeticException e){

System.err.println("除数不能为0");

}

System.out.println("num1/num2="+num3);

}

public static void Demo02(){

//数组越界

int [] nums = new int []{1,2,3};

try{

System.out.println(nums[3]);//这里的3指索引

}catch (ArrayIndexOutOfBoundsException e){

System.err.println("数组越界了");

}

}





public static void Demo03(){

int[] num = new int []{1,2,3};

num = null;

try {

System.out.println(num[2]);

} catch (NullPointerException c){

System.err.println("空指针异常");

}



}

public static void Demo04(){

Scanner input = new Scanner(System.in);

Date birthday = new Date();

System.out.println("请输入学生的出生日期:");

String dateStr = input.next();



SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

try {

birthday = sdf.parse(dateStr);

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");

String date2 = sdf2.format(birthday);



}

public static void Demo05(){

try{

int i = Integer.parseInt("aaa");

int num = 10/0;

int[] nums = new int[]{1,2,3};

}catch (Exception e){

System.err.println("除数不为零");

}finally {

System.out.println("无论如何都要执行下去");

}

}






​

日期的使用格式,以及用到的一些正则表达式:

​
构造方法:
/*

public Date()---》当前时间

public Date(long date)————》long date表示从1970年到现在为止的毫秒数

public long getTime()_--->>返回距离1970年(格林尼治标准时间)的毫秒数。*/

代码实例:

public static void main(String[] args) throws ParseException {

// String date = "2018年10月10鈤";

// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

// Date date2 = sdf.parse(date);

//

Demo04();

//System.out.println(date2.toLocaleString());

}

public static void Demo01(){

Date date = new Date();//当前时间

System.out.println(date);

System.out.println(date.toLocaleString());

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

String date1 = sdf.format(date);

}

public static void Demo02(){

Date d = new Date();

long ld = d.getTime();//获取1970年到现在为止的毫秒数

System.out.println(ld);

Date d2 = new Date();

System.out.println(d2.toLocaleString());

Date tomorrow = new Date(ld+1*24*60*60*1000);

System.out.println("明天:"+tomorrow.toLocaleString());

Date yesterday = new Date(ld-1*24*60*60*1000);

System.out.println("昨天:"+yesterday.toLocaleString());

}

public static void Demo03(){

//想知道现在的年份

Date date = new Date();

System.out.println(date.getYear()+1900);

//想知道现在的月份

System.out.println(date.getMonth()+1);//从零开始算起的

//想知道现在的日期

System.out.println(date.getDate());

//想知道现在的小时

System.out.println(date.getHours());

//想知道现在的分钟

System.out.println(date.getMinutes());

}

public static void Demo04(){

//其它方法

Date date = new Date();

System.out.println(date.toLocaleString());

date.setDate(10);

System.out.println(date.toLocaleString());

date.setYear(99);//从1900年算起

System.out.println(date.toLocaleString());

date.setMonth(11);//0-11

System.out.println(date.toLocaleString());

/*执行结果

   2018-7-19 17:42:54

2018-7-10 17:42:54

1999-7-10 17:42:54

1999-12-10 17:42:54

*/

}

​

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值