• API和正则表达式


    第一章 String & StringBuilder
    String类用类final修饰,不能被继承,String字符串被创建后永远无法被改变,但字符串引用可以重新赋值,改变引用的指向
    java字符串中任何一个字符对应16位(2个字节)的定长Unicode编码;

    java为了提高性能,静态字符串(字面量、常量、常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串
    对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在则返回该对象;
    *str.length();获取字符串中的字符的个数;
    *int str.indexOF(String str)//在字符串中检测str第一次出现的位置,返回int型下标值,找不到返回-1值
    *int indexOf(String str,int fromIndex)//从字符串的fromIndex位置开始检索str第一次出现的位置,返回下标
    *int lastIndexOf(String str,int from)//str在字符串中最后一次出现的位置
    面试题:
    String str ="java,我爱java,我热爱java,我非常热爱java";
    //问:子字符串java出现的次数

    int index=0;//java出现的下标
    int count=0;//java出现的次数
    while((index=str.indexOf("java",index))!=-1){
    System.out.println("index="+index);
    count++;
    index+="java".length();
    }
    System.out.println(count);

    *String substring(int beginIndex)//截取从指定下标开始到字符串结尾结束的子字符串,返回值为String类型
    *String substring(int beginIndex,int endIndex);//截取从指定下标开始到指定下标结束的子字符串,返回值为String类型
    (java中很多方法经常出现两个临界值,通常都是包头不包尾)
    【例】
    //截取第一个逗号到最后一个逗号之间的字符串

    int beginIndex=str.indexOf(",");
    int endIndex=str.lastIndexOf(",");
    String sub = str.substring(beginIndex+1, endIndex);
    System.out.println(sub);


    注意:java字符串中:中文输入法的","和英文输入法的","是不同的,写串了可导致查询结果为-1(即查询不到)

    *str.trim();//去掉字符串str开头和结尾处的空白字符格

    *char charAt(int index);//返回指定下标处的char字符

    *str.startsWith(String prefix);//判断str字符串是否以指定前缀prefix开头,返回boolean型判断结果

    *str.endsWith(String suffix);//判断str字符串是否以指定后缀suffix结尾,返回boolean型判断结果


    StringBuilder字符串生成器
    StringBuilder sub = new StringBuilder();//初始可放16个字符
    * .append(String str);用于实现大量字符串拼接
    * .insert(int offset,String str),在指定位置插入指定内容
    * .delete(int start,int end);删除指定位置开始到指定位置结束之间的字符串
    * .reverse(String str);完成字符串的反转

    -------------------------------------------------------------------------------
    第二章 Regex正则表达式 & Object类 & 包装类

    RegularExpression正则表达式
    定义:一串特定字符组成的“规则字符串”,用于描述/记录文本规则。
    意义:方便实现对字符串进行匹配、查找、替换等复杂操作。

    1)字符集合:
    [abc] :a,b,c中的任何一个
    [^abc] :除了a,b,c的任意字符
    [a-z] :a到z中的任意一个字符
    [a-zA-Z0-9] :a到zA到Z0~9中任意一个字符
    [a-z&&[^bc]]:a到z除了b和c以外的任意一个字符,&&表示与的关系;

    2)预定义字符集
    . :任意一个字符
    d :任意一个数字字符,相当于[0-9];
    D :非数字字符,相当于[^0-9];
    w :单词字符,相当于[a-zA-Z_0-9];
    W :非单词字符
    s :空白字符
    S :非空白字符

    3)数量词
    X? :表示0个或1个
    X* :表示0个或任意多个
    X+ :表示1到任意多个
    X{n} :表示n个X
    X{n,m} :表示n到m个X

    4)分组(),将一系列正则表达式看作一个整体,可以使用|表示或的关系
    字符转义
    ^ $ :边界匹配,^变是字符串开始,$表示字符串结束

    String正则API

    1)str.matches(regex):
    将一个字符串与正则表达式进行匹配,匹配成功返回true,否则返回false
    * 用户输入一个字符串,对此字符串进行校验
    * 必须满足第一个字符是abc的任意一个字符
    * 第二个字符是任意数字

    Scanner sc=new Scanner(System.in);
    boolean flag;
    do {
    System.out.println("请输入用户名,以a/b/c开头,包含数字");
    String str =sc.next();
    String regex="[abc][0-9]{2,8}";
    flag = str.matches(regex);
    if(flag==false) {System.out.println("输入错误,请重新输入:")
    }else {System.out.println("正确:");}
    }while(flag==false);

    str.matches(regex)默认自带^$,在匹配时一定是String.matches(regex)

    判断email格式是否合法:
    String regex1 ="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9]+\.)+[a-zA-Z]{2,4}$";

    2)str.split(String regex);返回值为字符串数组
    String [] s = email.split("[_@\.]");
    System.out.println(Arrays.toString(s));
    //[mr, w123, baidu, com, cn]

    3)replaceAll(String regex,String replacement)
    //将字符串中符合正则表达式regex规则的字符串替换成replacement
    String s2="中国,没有国中之国";
    String s3=s2.replaceAll("中国","*");
    System.out.println(s3);
    //*,没有国中之国

    Object(鼻祖类)
    如果定义一个Java类时没有使用extends关键字声明其父类,则其父类默认为:java.lang.Object类
    Object类型的引用变量可以指向任何类型对象。

    1)toString()重写
    * Object类中的toString()默认返回一个对象的字符串表示,
    * 而这个字符串在实际开始中没有什么具体意义,通常强烈建议
    * 在子类中重写toString()使其具有具体的意义
    * 重写规则:通常此方法将对象的属性值作为字符串返回
    /*
    * 在内存中,point是引用,保存的对象的地址值
    * 打印输出引用时会调用该类的toString(),如果该类没有
    * 那么,调用父类中的toString()
    * Object类中的toString()作用:返回一个表示该对象的字符串
    * 字符串形式:类名@散列码(十六进制的整数)
    * 散列码是根据地址值经过算法计算得出的一个整数
    */
    Point point = new Point(10, 20);
    System.out.println(point); //此对象表示的点的坐标

    2)equals()重写
    * Object类中的equals()方法作用等同于==
    * 用于比较两个引用是否指向同一个对象
    * 在实际开发中,通常建议根据实际业务重写equals方法,使得
    * 对象之间的比较更具有实际意义。
    * javaAPI中的很多类已经重写了equals(),如String

    包装类
    在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本类型转换为对象;
    所有基本类型都有一个与之相对应的类,即包装类(wrapper)
    包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值
    包装类是final的,不能定义他们的子类
    Number抽象类,是Byte,Double,Float,Integer,Long,Short类的父类;
    Number的子类必须提供方法(将表示的数值转换为byte,double,float,int,long,short等基本类型)
    intValue() 以int形式返回指定的数值
    doubleValue() 以double形式返回指定的数值
    floatValue() 以float形式返回指定的数值
    Number n = 123;
    Number m=123.45;
    int a =n.intValue();//a=123;
    double d =n.doubleValue();//d=123.0

    int a1 =m.intValue();//a1=123;
    double d1 =m.doubleValue();//d1=123.45;


    1)Integer常用功能:
    表示常量:
    static int MAX_VALUE值为2的31次方减1;表示int类型能表示的最大值
    static int MIN_VALUE值为-2的31次方;表示int类型能表示的最小值
    2)Integer静态方法parseInt:用于将字符串传为int

    Integer i =new Integer(3);//将3转换为对象i
    double d=i.doubleValue();//将对象中的值用于计算,
    System.out.println(d);//3.0
    Double d1 =Double.valueOf(d);//将数字表示的值用于面向对象开发

    /*
    * parseInt(String),将String转换为int类型
    * 转换的前提是该String类型的值一定是整数类型
    * 否则失败,抛出异常
    */

    String str ="123";
    int s1=Integer.parseInt(str);
    System.out.println(s1+4);//123+4=127
    str="a123";
    //s1=Integer.parseInt(str);
    System.out.println(s1);//NumberFormatException数字格式异常
    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    Mesh简介
    不区分大小写字符串比较函数
    python3.5.4安装时老是弹出api-ms-win-crt-runtime-|1-1-0.dll错误的解决方法
    如何在SVN创建分支版本
    Sublime使用小技巧——去掉.dump后缀
    STM32F407串口调试总结
    USB学习笔记
    实验四+005+陈晓华
    实验三+005+陈晓华
    第5次作业+005+陈晓华
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/9153217.html
Copyright © 2020-2023  润新知