码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员 - 正则表达式和常用其他类

时间:2015-08-21 21:10:06      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

正则表达式:

专门用于操作字符串
特点:用于一些特定的符号来表示一些代码操作,这样就简化了书写
好处:可以简化书写
弊端:阅读性差

具体功能:
1.匹配:matches方法
定义字符个数和规则 reg = [字符范围][字符范围](前一个[]的个数范围)
例 String reg = [ab][a-z][0-9]{1-3} \d 数字
表示3~5长度的字符串第一个字符(a或b)第二个(a~z)第三~五个字符(0~9)
boolean b=str.matches(reg) 判断str字符串是否满足规则reg
2.切割:split 方法
定义字符个数和规则 reg = ","(表示按照,切割) ; reg = " +"(按照多个空格切割)
注意:多个时在后面加+; .表示任意字符,不能将其定义为切割标识。 需要用时需对其进行转译 reg="\\."; \为转译 \.为.在正则中的写法
\\的转译写法为 \\\\;叠词切割 双叠词reg = "(.)\\1" (.)表示任意单字符的组
每个组产生都有编号 \1表示第一个组 \1表示与前一个字符相同,定义为字符串时加转译符
3.替换:replaceAll(String reg , String replacrstr)
4.取出
定义规则,封装规则为Pattern对象,关联字符获取匹配器,用匹配器查找,用匹配器获取找到的对象

边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

import java.util.regex.*;
class  RegexDemo
{
    public static void main(String[] args) 
    {    
        System.out.println("确认qq号:");
        checkQQ1();         
        System.out.println("演示正则取出:");
        getDemo();
        System.out.println("演示正则替换:");
        replaceDemo();
        System.out.println("演示正则切割:");
        splitDemo();
    }
    /* 需求,对QQ号码进行校验
    要求:5~15位,0不能开头,只能是数字。
    */
    //取出
    public static void getDemo()
    {
        String str = "ming tian jiu yao fang jia le ,da jia";
        String reg = "\\b[a-z]{3}\\b";  // \b 单词边界 定义取出规则为3个字母的字符串,其前后为单词边界
        //将规则封装成对象
        Pattern p = Pattern.compile(reg);
        //让正则对象和要作用的字符关联,获取匹配器
        Matcher m = p.matcher(str);
        //System.out.println(m.matcher())
        while (m.find())  //boolean b = m.find();
        {
            System.out.println(m.group());
        }
    }
    //替换
    public static void replaceDemo()
    {
        String str =  "aabbccdd00112233";
        String reg = "(.)\\1+";//定义替换规则为将叠词变为单词
        String str1 = str.replaceAll(reg,"$1");//将XXXX-->X,$1表示获取第一组
        System.out.println(str1);
    }
    
    //切割正则写法
    public static void splitDemo()
    {
        String str = "111,222,333";
        String reg = ",";//定义切割规则 
        String []arr = str.split(reg);//调用切割函数
        for (String s : arr )
        {
            System.out.println(s);
        }
    }
    //常规写法
    public static void checkQQ1()           //确定输入字符串是否满足QQ号规则
    {
        String qq = "1251111111111111aa6";    //定义一个字符串
        int len = qq.length();                //确定其长度
        if (!qq.startsWith("0"))            //判断其是否是有0开头
        {
            char[] arr = qq.toCharArray();    //将字符串变为字符数组
            if (!(arr.length>=5&&arr.length<=15))//判断其长度是否是5~15
            {
                System.out.println("QQ长度错误");
                return;
            }
            for (int x = 0;x<arr.length ;x++ )//遍历确定其是否每一位都是数字
            {
                if(!(arr[x]>=‘0‘&&arr[x]<=‘9‘))
                {
                    System.out.println("QQ只能是数字");                        
                    return;
                }    
            }
            System.out.println("QQ:"+qq);    
        }
        else
            System.out.println("不可以0开头");
    }
}

运行结果:

技术分享

 

System类:

类中的方法和属性都是静态的。
out:标准输出
in:标准输入
描述一些系统信息
常用方法:
获取系统属性信息:Properties getProperties();

import java.util.*;
import java.text.*;
class  SystemDemo
{
    public static void main(String[] args) 
    {
        Properties prop = System.getProperties();
        //因为Properties是Hashtable的子类,也是Map集合中的一个子类对象。
        //那么可通过map的方法取出该集合的元素。
        //该集合中存储的都是字符串,,欸有泛型定义
        //如何在系统中自定义一些特有信息?
        System.setProperty("mykey","myvalue");
        //获取指定属性信息。
        String value1 = System.getProperty("os.name");
        System.out.println("value1="+value1);
        /*
        jm启动时,动态加载一些属性信息?
        java 启动代码:
        java -D自定义键=自定义属性信息 类名
        例:java -Dmyset=myvalue2 SystemDemo
        */
        String myset =System.getProperty("myset");
        System.out.println("myset="+myset);
        for (Object obj: prop.keySet())
        {
            String value2 = (String)prop.get(obj);
            System.out.println(obj+":"+value2);
        }
    }
}

Runtime类:
该类并没有提供构造函数,说明不能new对象,该类中的方法均为静态的。
常用方法:
exec("执行程序路径") 执行程序

class  RuntimeDemo
{
    public static void main(String[] args) throws Exception
    {
        Runtime r = Runtime.getRuntime();
        Process p = r.exec("C:\\Program Files (x86)\\Battle.net\\Battle.net Launcher.exe");
        //p.destroy();  //杀掉该进程
    }
}

Date类:
导入的是java.text包。

Calendar
用于提取日期中的具体信息。

class DateDemo
{    
    public static void main(String[] args) 
    {
        Date d =new Date();
        System.out.println(d);
        //设置日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        String time = sdf.format(d);//利用SimpleDateFormat格式化日期格式。
        System.out.println("time = "+time);

        Calendar c = Calendar.getInstance();
        System.out.println(c.get(Calendar.YEAR)+"年"+c.get(Calendar.MOUTH)+"月");
    }
}

Math类

    public static int abs(int a):取a的绝对值;
    public static double ceil(double a):向上取整;
    public static double floor(double a):向下取整;
    public static int max(int a,int b) :取a和b的最大值
    public static double pow(double a,double b):返回第一个参数的第二个参数次幂的值。
    public static double random():获取一个double类型的随机数。该值>=0 并且 < 1.0
    public static int round(float a):四舍五入取整(参数为double的自学)
    public static double sqrt(double a):返回正确舍入的 double 值的正平方根

class MathDemo
{
    public static void main(String[] args)
    {
        double d1 = Math.floor(16.34);//floor方法 返回小于指定数据的最大整数。
        double d2 = Math.ceil(16.34);//ceil方法 返回大于指定数据的最小整数。
        double d3 = Math.round(12.54);//round方法 四舍五入
        double d4 = Math.pow(2,3);//pow方法 前面数据的后面数据的幂次方
        int d5 = (int) (Math.random()*10+1);//random方法 生成一个大于等于0.0而且小于1.0的伪随机double值。
        //Random r = new Random ();         //生成随机数的第二种方法。
        // int d5 = r.nextInt(10)+1;     
        System.out.println("d1="+d1+";d2="+d2+";d3="+d3+";d4="+d4+";d5="+d5);
    }
}

运行结果:

技术分享

 

黑马程序员 - 正则表达式和常用其他类

标签:

原文地址:http://www.cnblogs.com/myblog-cl/p/4748910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!