关于正则表达式和包装类(Java)

3 篇文章 0 订阅

在Java中用到正则表达式的三个方法
String[] split(String regex)
String replaceAll(String regex,String str)
boolean matches(String regex)
实例代码:

/**
 * 字符串支持正则表达式的方法一:
 * boolean matches(String regex)
 * 根据给定的正则表达式验证当前字符串是否满足格式、
 *要求,满足则返回true,负责返回false 
 *
 *regex:正则表达式
 *matches:动词。匹配的单三形式
 * @author Analyze
 *
 */
public class Matches {
    public static void main(String[] args) {


        /*
         * 用正则表达式来表达邮箱
         * [a-zA-Z0-9_]+@\w+(\.[a-zA-Z0-9_]+)+
         * 因为.在正则表达式中有特殊含义,所以需要将.加上转义字符\
         * String regex=" [a-zA-Z0-9_]+@\w+(\.[a-zA-Z0-9_]+)+";
         * 编译报错
         * 但是在Java中\也是转移字符,他会先将正则表达式中的\w和\.转义,
         * 但是Java中没有\w和\.转义的含义,所以报错
         * 需要将/再次转义
         * 这样就变成了\\w和\\.
         */
         String regex="[a-zA-Z0-9_]+@\\w+(\\.[a-zA-Z0-9_]+)+";
         System.out.println(regex);

         String email="fancq@tedu.cn";
         boolean flag=email.matches(regex);
         if(flag){
            System.out.println("是邮箱"); 
         }else{
             System.out.println("不是邮箱");
         }
    }
}
/**
 * 字符串支持正则表达方法二:
 * String[] split(String regex)
 * 将当前字符串按照满足正则表达式的部分进行拆分
 * 返回拆分后的每段内容
 * 如果能连续满足正则表达式,就会拆分出空字符串
 * 例如:
 * 将下面的字符串按照regex="[0-9]"拆分
 * 那么结果为:
 * 拆分长度:10
    abc


    def


    ghi


    jkl

    但是!!注意如果拆分结果最后为空字符串那么不会显示
    例如:
    将字符串改为:String str="abc123def456ghi789jkl1111"
    按照regex="[0-9]"拆分,结果为:
    拆分长度:10
    abc


    def


    ghi


    jkl
 * @author Analyze
 *
 */
public class Split {

    public static void main(String[] args) {
        String str="abc123def456ghi789jk";
        /*
         * 按照数字拆分,保留所有的英文字母部分
         */
        String regex="[0-9]+";
        String [] array=str.split(regex);

        System.out.println("拆分长度:"+array.length);
        for(int i=0;i<array.length;i++){
            System.out.println(array[i]);
        }
    }

}
/**
 * String replaceAll(String regex,String str)
 * 将当前字符串中满足正则表达式的部分替换为给定字符
 * @author Analyze
 *
 */
public class ReplaceAll {

    public static void main(String[] args) {
        String str="abc123def456ghi789jk";
        /*
         * 将数字部分替换为#NUMBER#
         */
        String regex="\\d+";
        //正则表达式\d表示数子,需要在Java中再次转义
        str=str.replaceAll(regex, "#NUMBER#");
        System.out.println(str);
    }

}

包装类:为了使八个基本类型具有能像面向对象开发的特性
Java提出了包装类。每个基本类型都有一个包装类与之对应

实例代码:

/**
 * 包装类
 * Java对于8个基本类型分别定义了对应的包装类
 * 特殊记忆的:
 * int     Integer
 * char    Character
 * 其他只需要首字母大写
 * 例如
 * boolean  Boolean
 * 而包装类出现的原因是为了解决基本类型不能参与面向对象开发的问题
 * @author Analyze
 *
 */
public class IntegerDemo1 {

    public static void main(String[] args) {
        dosome("abc");
        dosome(new Point(1,2));
        dosome(1);
        /**
         * !!这里注意,!!在jdk1.4版本前这么写是会报错的
         * !!在jdk1.4版本前认为8个基本类型:
         * byte,short,int,long,float.double,char
         * boolean
         * 是以值的形式直接存在的,所以他们没有面向对象的特征
         * 自然也不继承Object,所以不能使用多态,用Object的
         * 角度去接受基本类型
         */
        /**
         * 为了方便Java在JDK1.4之后提供的包装类的说法
         * dosome(1)
         * q其实变为dosome(new Integer(1));
         */
        dosome(new Integer(1));
        /*
         *Java不仅帮助你完成了包装类,还有脱包装的方法
         *例如:
         *public class Integer{
         *  private i;
         *  public Integer(int i){
         *      this.i=i;
         *  }
         *  public int intValue(){
         *      return this.i; 
         *  }
         *}
         *
         */

    }
    public static void dosome(Object obj){
        System.out.println(obj.equals(1));
    }

}
/**
 * 数字类型的包装类继承自Number
 * 其提供了如:intValue,doubleValue这样的方法
 * 作用是可以将当前包装类表示的数字以其他数字类型形式返回
 * @author Analyze
 *
 */
public class IntegerDemo2 {

    public static void main(String[] args) {
        /*
         * 将基本类型转换为包装类有两种方式:
         * 1.调用构造方法
         * 2.调用静态方法ValueOf()
         * 
         * 两者会有一定的区别
         * 用valueOf方法时,在字面量小于一个字节(-128-127)时
         * 会和String一样重用
         * 所以推荐用valueOf()方法包装
         */

        //代码示例
        Integer i1=new Integer(123);
        Integer i2=new Integer(123);

        System.out.println("用构造方法创建==判断结果:"+(i1==i2));
        System.out.println("用构造方法创建equal判断结果:"+i1.equals(i2));

        Integer i3=Integer.valueOf("123");
        Integer i4=Integer.valueOf(123);

        System.out.println("用valueOf方法创建,==判断结果:"+(i3==i4));
        System.out.println("用valueOf方法创建,equal判断结果:"+i3.equals(i4));

        System.out.println("||||||||||||||||||||||||||");

        int i=i1.intValue();
        System.out.println(i);

        double d=i1.doubleValue();
        System.out.println(d);

        byte b=i1.byteValue();
        System.out.println(b);


    }

}
/**
 * 数字类型包装类都支持两个常量:
 * MAX_VALUE,MIN_VALUE
 * 分别保存了对应基本类型的最大值与最小值
 * @author Analyze
 *
 */
public class IntegerDemo3 {

    public static void main(String[] args) {
        //获取int最大值和最小值
        int imax=Integer.MAX_VALUE;
        int imin=Integer.MIN_VALUE;
        System.out.println(imax);
        System.out.println(imin);

        //获取double最大值和最小值
        double dmax=Double.MAX_VALUE;
        double dmin=Double.MIN_VALUE;
        System.out.println(dmax);
        System.out.println(dmin);


    }

}
/**
 * 包装类提供了一个静态方法parseXXX(String str)
 * 可以将给定的字符串转换为对应的基本类型
 * 提前是该字符串必须正确的描述基本类型可以保存的值
 * @author Analyze
 * 
 * parse的英文意思为对XXX进行语法分析
 *
 */
public class IntegerDemo4 {

    public static void main(String[] args) {
         String str="123";
         int i=Integer.parseInt(str);
         System.out.println(i);

         double d=Double.parseDouble(str);
         System.out.println(d+1.5);

    }

}
public class IntegerDemo5 {
/**
 * JDK1.5之后推出了一个新特性
 * 自动拆装箱
 * @param args
 */
    public static void main(String[] args) {
        /*
         * 自动拆装箱是编译器认可,而不是虚拟机认可
         * 编译器在原程序编译时自动补充代码来完成
         * 基本类型与包装类之间的转换
         * 
         * 下面代码自动触发了自动拆箱:
         * 在class文件中,下面的代码被编译器改为:
         * int i=new Integer(1).intValue();
         */
        int i=new Integer(1);
        System.out.println(i);
        /*
         * 下面的代码触发了自动装箱:
         * 在class文件中,下面代码被编译器改为
         * Integer ii=Integer.valueOf(123);
         */
        Integer ii=123;
        System.out.println(ii);
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值