one-12 正则表达式 包装类 IO流

1.正则表达式Regex

String提供了支持正则表达式的方法

  1. Matches(正则) : 当前字符串能否匹配正则表达式
  2. replaceAll(正则,子串) : 替换子串
  3. split(正则) : 拆分字符串

k 必须匹配指定字符k
abc 必须匹配指定字符abc
[abc] 只匹配单个的字符
[abc] [123] 两个里面各取一个进行组合
[a-z] 匹配小写26个字母
[a-zA-Z0-9] 三种符合的都可以单一的存在
[^a-zA-Z] 排除英文字母
\d 数字,相当于[0-9]
\D 排除数字,相当于[^0-9]
\s 空白字符
\S 排除空白字符
\w 字母数字下划线,相当于[a-zA-Z0-9]
\W 排除字母数字下划线
. 单个匹配任意字符
[abc]? ?表示,出现0次或者1次
[abc]?[123] 组合,如1,2,a1,a2
[abc]* 表示,可以出现0到多次
[abc]+ +表示,出现的次数要>=1次
[abc]{3} 元素可以出现3次,aaa,bbb,abc.

private static void method1() {
        System.out.println("请输入身份证号");
        String s = new Scanner(System.in).nextLine();
        /*单个 \ 在java中有特殊含义,表示转义符号,不认为是一个斜杠
         * 所以如果想要表示斜杠,需要在它的前面加一个用来转义的 \
         * 也就是 \\ 才表示成一个单纯的 \ */
        String Regex = "[\\d]{17}[\\dX]";
        if(s.matches(Regex)){
            System.out.println("输入正确");
        }else{
            System.out.println("请重新输入");
        }
    }

2.包装类

  1. 包装类把基本类型进行包装,提供更加完善的功能。
    基本类型是没有任何功能的,只是一个变量,记录值,而包装类可以有更加丰富的功能
  2. Number抽象类
    数字包装类的抽象父类。
    提供了各种获取值的方式。
/**本类用于测试基本类型的包装类*/
public class TestNumber {
    public static void main(String[] args) {
        Integer i1 = new Integer(123);
        Integer i11 = new Integer(123);
        System.out.println(i1 == i11); //false
        System.out.println(i1.equals(i11));//true

        /*Integer有高效的效果,但是必须满足三个条件:
        * 1.是Integer类型
        * 2.使用valuesOf()的创建条件
        * 3.数据在-128 ~ 127的范围内
        * 满足以上条件,相同的数据只会存一次,后续再使用都是以前存过的数据*/
        Integer i2 = Integer.valueOf(100);
        Integer i22 = Integer.valueOf(100);
        System.out.println(i2 == i22); //true

        Integer i3 = Integer.valueOf(300);
        Integer i33 = Integer.valueOf(300);
        System.out.println(i3 == i33); // false,超过高效的数据范围-128~1279

        Double d1 = new Double(3.14);
        Double d11 = new Double(3.14);
        System.out.println(d1 == d11); //false
        /*只有Integer才有高效的效果,Double没有*/
        Double d2 = Double.valueOf(3.14);
        Double d22 = Double.valueOf(3.14);
        System.out.println(d2==d22);//false
        //这个方法的作用就是把传入的String类型的数据转成int

        /*对象是什么类型的,就可以使用这个类的所有资源
        * i1是Integer类型的对象,所以可以使用parseInt()将String类型的数据转为int类型
        * d1是Double类型的对象,所以可以使用parseDouble()将String类型的数据转为double类型*/
        System.out.println(i1.parseInt("800")+8); //808
        System.out.println(d1.parseDouble("2.2")+3.4); //5.6
    }
}

int类型装箱与拆箱

/**本类用于测试自动装箱与自动拆箱*/
public class TestBox {
    public static void main(String[] args) {
        Integer i1 = new Integer(100);
        Integer i11 = new Integer(100);
        Integer i2 = Integer.valueOf(100);
        Integer i22 = Integer.valueOf(100);
        System.out.println(i11==i22); //false
        System.out.println(i1==i11); //false
        System.out.println(i2==i22);//true

        /*1.自动装箱,编译器会自动把基本类型int 5,包装成对应的包装类型Integer
        * 然后交给i3来保存,自动装箱底层发生的代码: Integer.valueOf(5);
        * valueOf()的方向: int ---> Integer*/
        Integer i3 = 5;//不会报错,这个现象就是自动装箱
        /*2.自动拆箱,编译器会自动把包装类型的i1拆掉箱子,变回基本类型数据5
        * 然后交给基本类型int i4 来保存,底层发生的代码: i1.intValue()
        * intValue()的方向: Integer ---> int*/
        int i4 = i1; //不会报错,这个现象就是自动拆箱
    }
}

3.io流

  1. 流只能单方向流动
  2. 输入流用来读取 → in
  3. 输出流用来写出 → out
  4. 数据只能从头到尾顺序的读写一次
3.1 IO流的继承结构

File
字节流:针对二进制文件
InputStream
FileInputStream
BufferedInputStream
ObjectInputStream
OutputStream
FileOutputStream
BufferedOutputStream
ObjectOutputStream
字符流:针对文本文件
Reader
FileReader
BufferedReader
InputStreamReader
Writer
FileWriter
BufferedWriter
OutputStreamWriter
PrintWriter一行行写出

3.2 File文件类

概述
封装一个磁盘路径字符串,对这个路径可以执行一次操作
可以封装文件路径、文件夹路径、不存在的路径

/**本类用于测试文件类File*/
public class TestFile {
    public static void main(String[] args) throws IOException {
        /*1.ready目录与1.txt需要自己创建
        * 2.需要导包: import java.io.File;
        * 3.路径是String类型,必须写正确,不然找不到文件
        * 4.完整的文件名包含两部分: 文件名+后缀名*/
        File file = new File("D:\\ready\\1.txt");
        //2.1file中的常用方法
        System.out.println(file.length()); //3,获取文件字节量
        System.out.println(file.exists());//true, 判断文件是否存在
        System.out.println(file.isFile());//true,判断是否为文件
        System.out.println(file.isDirectory());//false,判断是否为文件夹
        System.out.println(file.getName());//1.txt,获取文件名
        System.out.println(file.getParent());//D:\ready,获取父级目录
        System.out.println(file.getAbsolutePath());//D:\ready\1.txt,获取带盘符的完整路径:绝对路径
        //2.2 创建与删除
        /*new 只会在内存中创建一个File类型的对象
        * 并不会在磁盘中创建一个真实存在的2.txt文件*/
        file = new File("D:\\ready\\2.txt");
        System.out.println("******************");
        /*如果指定创建文件的路径不对,会抛出异常: java.io.Exception
        * 所以需要提前处理这个问题,暂时选择在main()上抛出
        * 这个IO异常是目前我们遇到的强制要求必须预先处理的异常
        * 如果不处理,方法的调用会报错,不能通过编译*/
        System.out.println(file.createNewFile());//创建一个之前并不存在的文件,如果创建成功就会返回true

        file = new File("D:\\ready\\m");
        System.out.println(file.mkdir());//创建之前不存在的单层文件夹

        file = new File("D:\\ready\\a\\b");
        System.out.println(file.mkdirs());//创建之前不存在的多层文件夹

        System.out.println(file.delete());//true,删除空文件夹/文件

        file = new File("D:\\ready\\a");
        System.out.println(file.delete());// false,只能删除空文件夹

        file = new File("D:\\ready\\2.txt");
        System.out.println(file.delete());// true,2.txt被删除,可以删除文件

        //2.3测展示文件列表
        file = new File("D:\\ready");
        String[] list = file.list();/*不常用*/
        System.out.println(Arrays.toString(list));
        //String[]不能用File[]的方法
//        System.out.println(list[0].isDirectory());

        File[] fs = file.listFiles();/*常用*/
        System.out.println(Arrays.toString(fs));
        System.out.println(fs[0].isDirectory());

    }
}

3.3 字节流读取

字节流是由字节组成的,字符流是由字符组成的.
Java里字符由两个字节组成.字节流是基本流,主要用在处理二进制数据。
所以字节流是比较常用的,可以可以处理多种不同种类的文件,比如文本文档/音频/视频等等

3.3.1 InputStream抽象类

此抽象类是表示字节输入流的所有类的超类/抽象类,不可创建对象
常用方法:

abstract int read() 从输入流中读取数据的下一个字节
int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中
int read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节读入 byte 数组,off表示存时的偏移量
void close() 关闭此输入流并释放与该流关联的所有系统资源
3.3.2 FileInputStream子类
创建对象
FileInputStream(File file)—直接传文件对象
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定FileInputStream(String pathname)—传路径
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定
/**本类用于练习字节输入流*/
public class TestIn {
    public static void main(String[] args) {
        try {
//            InputStream in = new FileInputStream(new File("D:\\ready\\1.txt"));
            InputStream in = new FileInputStream("D:\\ready\\1.txt");
            System.out.println(in.read());
            System.out.println(in.read());
            System.out.println(in.read());
        } catch (Exception e) {
            e.printStackTrace();//报错后会在控制台给程序员打印错误信息用来调试
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值