java的String类、字符串缓冲区、正则表达式

时间:2021-11-20 18:46:53

1、String类:
(1)String类不需要new

(2)字符串是常量,它们的值在创建之后不能更改,但是变量的地址值是可以改变的。

例如:

package com.oracle.demo01;

public class demo01 {

    public static void main(String[] args) {
        //字符串是免new的
        String   a = "abc";
        a = "bbc";
    }
}

(3)字符串的本质是一个字符的数组。

 

  java的String类、字符串缓冲区、正则表达式

(4)String str = new String("a");
在内存中有两个对象。一个new的对象在堆中,
一个字符串本身对象,在字符串常量池中.

java的String类、字符串缓冲区、正则表达式

 


(5)String类构造方法

package com.oracle.demo02;

public class demo01 {
            public static void main(String[] args) {
                byte[]  bytes = {-65,-67,68,69};
                //如果是正数按照ASCII码表对byte数组进行解析,解析成字符
                //如果是负数是汉字,并且一个汉字对应两个字节
                /*String str = new String(bytes);
                System.out.println(str);*/
                char[]  chars = {'n','w','t'};
                String str = new String(chars);
                System.out.println(str);
            }
}

(6)String类的方法查找:
.length();.substring(i);.substring(i,j);

例如:

package com.oracle.demo03;

public class demo01 {
            public static void main(String[] args) {
                //判断两个字符串是否内容相同(忽略大小写)
                System.out.println("NIHAO".equalsIgnoreCase("nihao"));
                String    str = "hellojavanihaojava.text";
                //截取字符串
                System.out.println(str.substring(4));
                //判断前缀
                System.out.println(str.startsWith("b"));
                String str1 = "nihaojava";
                //将字符串转为字节数组
                byte[] b1 = str1.getBytes();
                System.out.println(b1);
                for(int i  = 0;i < b1.length;i++){
                    System.out.print(b1[i]+",");
                }
                char[]  b2 = str1.toCharArray();
                System.out.println(b2);
                for(int j  = 0;j < b2.length;j++){
                    System.out.print(b2[j]+",");
                }
            }
            
}

 

package com.oracle.demo04;

public class demo01 {
            public static void main(String[] args) {
                    String  str1 = "abcdefg";
                    String  str2 = "";
                    //判断该字符串的内容是否为空的字符串
                    System.out.println(str2.isEmpty());//true
                    //获取给定的字符,在该字符串中第一次出现的位置
                    System.out.println(str1.indexOf("bc"));//1
                    //获取该字符串中指定位置上的字符
                    System.out.println(str1.charAt(3));
                    String str3 = "ABCDE";
                    //把该字符串转换成 小写字符串
                    System.out.println(str3.toLowerCase());//abcde
                    /*System.out.println(str3.toLowerCase(Locale locale));*/
                    //把该字符串转换成 大写字符串
                    System.out.println(str1.toUpperCase());//ABCDEFG
                    //在该字符串中,将给定的旧字符,用新字符替换
                    System.out.println(str1.replace('b','1'));//a1cdefg
                    //在该字符串中,将给定的旧字符串,用新字符串替换
                    System.out.println(str1.replace("bc","abd"));//aabddefg
                    //去除字符串两端空格,中间的不会去除,返回一个新字符串
                    String   str4 = "\ta\tb\t";
                    System.out.println(str4+"hhh");//    a    b    hhh    
                    System.out.println(str4.trim()+"hhh");//a    bhhh
            }
}

2、字符串缓冲区:
(1)StringBuffer:[可变字符序列]
(2)StringBuffer的方法使用:
.append(str);.delete(i,j);.inset(i,str);.replace(i,j,str);

package com.oracle.demo05;

public class demo01 {

    public static void main(String[] args) {
        //创建字符缓冲区
        StringBuffer  sbb = new StringBuffer("abcdefghijk");
        //替换
        sbb.replace(0, 1, "ss");
        System.out.println(sbb);
        //添加
        sbb.append(true);
        System.out.println(sbb);
        //删除
        sbb.delete(0, 1);
        System.out.println(sbb);
        //修改
        sbb.insert(0, "a");
        System.out.println(sbb);
        /*ssbcdefghijk
        ssbcdefghijktrue
        sbcdefghijktrue
        asbcdefghijktrue*/
    }

}

(3)对象的方法链式调用:

例如:只要返回值和调用对象类型相同

str.append().append().toString()

(4)StringBuilder类:
StringBuilder比StringBuffer快,但是不如StringBuffer安全;
3、正则表达式:
(1)正则表达式是一个字符串;
(2)匹配规则:【区分大小写字母】

例如:

package com.oracle.demo05;

public class demo03 {
        public static void main(String[] args) {
              String   str  = "0533-3153666-000";
              String   regex = "-";
              String[] flag = str.split(regex);
              for(int i = 0;i < flag.length;i++){
                     System.out.println(flag[i]);
            }
        }
}

java的String类、字符串缓冲区、正则表达式

package com.oracle.demo05;

public class demo02 {
            public static void main(String[] args) {
                 String str = "17865164082";
                 String regex = "1[3,4,5,7,8][0-9]{9}";
                 boolean flag = str.matches(regex);
                 System.out.println(flag);
            }
}

java的String类、字符串缓冲区、正则表达式