字符串和正则表达式

字符串常量

  1. 字符串常量直接指向常量池的首地址,字符串变量是指向堆空间,堆空间指向常量池。

    //常量池
    String str1="str";
    //常量池
    String str2="ing";
    //常量池
    String str3="str"+"ing";
    System.out.println(str3);
    //在堆中创建新对象
    String str4=str1+str2;
    System.out.println();
    //equals():内容是否相等,首先看地址是否相等,在看内容是否相等
    System.out.println(str4.equals(str3));

字符串比较相等

  1. ==在比较字符串对象的时候用来比较什么?---地址比较

  2. equals():内容是否相等,通过源代码分析,首先比较的是地址是否相等,如果相等就是true,如果地址不相等,就一个字符一个字符的进行比较。看是否相等,它是重写了Object对象的equals()方法,Object中的equals()比较的是地址。

    //常量池
    String str1="str";
    //常量池
    String str2="ing";
    //常量池
    String str3="str"+"ing";
    System.out.println(str3);
    //在堆中创建新对象
    String str4=str1+str2;
    System.out.println();
    //equals():内容是否相等,首先看地址是否相等,在看内容是否相等
    System.out.println(str4.equals(str3));

字符串对象的方法

  1. 比较字符串是否相等

    String s3="hello";
    String s4=new String("hello");
    System.out.println(s3.equals(s4));
    String s5="Hello";
    //equalsIgnoreCase()比较字符串内容是否相等,忽略大小写
    System.out.println(s3.equalsIgnoreCase(s5));
    //startsWith判断字符串对象否以指定的str开头
    String filename="abc_f.txt";
    System.out.println(filename.startsWith("1abc"));//false
    //endsWith判断字符串对象否以指定的str结尾
    System.out.println(filename.endsWith("txt"));
  1. 获取字符串长度

    String leng="abcdef";
    //获取字符串长度
    System.out.println(leng.length());
    //获得指定字符串索引处的字符
    char c=leng.charAt(1);
    System.out.println(c);
    //indexOf(String str):获取str在字符串对象中第一次出现的索引
    int index=leng.indexOf("abc");
    System.out.println(index);
    //把字符串转换位字符数组
    char[] chars=leng.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        System.out.print(chars[i]+" ");
    }
  1. 获取指定字符串中,大写字母、小写字母、数字的个数。

    String s="12EaFCJD456affffcfe";
    //1.将字符串转成字符数组
    char[] chars1=s.toCharArray();
    int m=0;
    int n=0;
    int k=0;
    for (char c1 : chars1) {
        if (c1>='a'&&c1<='z'){
            m++;
        }
        if (c1>='A'&&c1<='Z'){
            n++;
        }
        if (c1>='0'&&c1<='9'){
            k++;
        }
    }
    System.out.println("小写字母"+m+"\t"+"大写字母"+n+
    "\t"+"数字"+k);

StringBuffer和StringBuilder

  1. StringBuffer的相关方法

    1. append(),追加道字符串的末位

    2. insert():插入到指定位置

    3. delete():删除字符串

    4. reverse():反转

    StringBuilder stringBuilder=new StringBuilder("abc");
    //        1. append(),追加道字符串的末位
            stringBuilder.append("def").append("lyh").append("hello");
            System.out.println(stringBuilder.toString());
    //        2. insert():插入到指定位置
            stringBuilder.insert(1,"zz");
            System.out.println(stringBuilder.toString());
    //        3. delete():删除字符串
            stringBuilder.delete(1,3);
            System.out.println(stringBuilder.toString());
    //        4. reverse():反转
            stringBuilder.reverse();
            System.out.println(stringBuilder.toString());
  1. 需求:判断一个字符串是否是手机字符串 "13533839778"

    1. 手机号的规则:

    2. 手机号的长度必须是11位

    3. 手机号的第一位必须是1

    4. 手机号的第二位:3或4或5或7或8

    5. 手机号的剩余九位的每一位都必须是数字

      //1.定义字符串存储手机号
      String phone="18567799046";
      //2.定义一个正则表达式
      String reg="1[34578]\\d{9}";
      //3.利用字符串函数进行匹配
      boolean matches = phone.matches(reg);
      System.out.println(matches);
  2. 将字符串“abcpof67kkk12kkk5sss”中的数字变成汉字“我们”

    //1.定义一个等待检查的字符串
    String s="ssdasff22554daaf45afa1a5";
    //2.定义一个正则表达式
    String regs="\\d";
    //3.用字符串的代替方式
    String s1 = s.replaceAll(regs, "我们");
    //4.输出结构
    System.out.println(s1);
  3. 注册的时候要求用户输入邮箱,规则是:

    1)字母开头,中间可以是字母数字下划线或$.

    2)接着是@

    3)是字母长度不超过10位

    4).和字母长度不超过3位

    5)后面还可以接一个.字母,长度不能超过3位

    编码验证改邮箱yy_y$_222y@sina.com.cn是否合法

    String email="yy_y$_222y@sina.com.cn";
    String rages="[a-zA-Z][\\w_$]{5,}{1,10}(\\.[a-zA-Z]{2,3}{1,2})";
    boolean matches1 = email.matches(rages);
    System.out.println(matches1);
  4. 总结

  1. String 是不可变的,StringBuffer、StringBuilder 是可变的;

  2. String 、StringBuffer 是线程安全的,StringBuilder 不是线程安全的。

  3. StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类

  4. StringBuffer:效率高;StringBuilder:安全性高

  5.  
posted @ 2022-10-09 20:53  菜鸡前来  阅读(41)  评论(0编辑  收藏  举报