Java | 字符串的使用 & 分析

字符串

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,在程序中所有的双引号字符串,都是String类的对象。

字符串的特点

1、字符串的内容永不可变。
2、正在是因为字符串的不可变,所以字符串是可心共享使用的。
3、字符串效果上相当于是char[]字符数组,但是底层其实是byte[]字节数组。

创建字符串

创建字符串一共有两种比较常用的方法,两种常用的方法。

第一种常用的方法

直接在等号后面加上一字符串的常量。

    String str = "Hello World!";
    System.out.println("第一种常用的创建方法:" + str);
    //输出的结果:第一种常用的创建方法:Hello World!

第二种常用的方法

用String类的无参构造方法。

    String str = new String();
    System.out.println("第二种常用的的创建方法:" + str);
    //输出的结果:第二种常用的创建方法:(后面是空,没有值的)

第一种不常用的方法

用String类的有参构造方法。【public String(char[])】

    char[] arrch = {'老', '酒','馆','的','锅'};
    String str = new String(arrch);
    System.out.println("第一种不常用的创建方法:" + str);
    //输出的结果:第一种不常用的创建方法:老酒馆的锅

第二种不常用的方法

用String类的有参构造方法。【public String(byte[])】

    byte[] arrbyte = {97, 98, 99}; //里面的数字,是对照ASCII表的
    String str = new String(arrbyte);
    System.out.println("第二种不常用的创建方法:" + str);
    //输出的结果:第二种不常用的创建方法:abc

上面的所有加上引号的字符串,都是一个String对象,都在在常量池里面的

字符串的常量池

在上面说到,所有的加引号的字符串都在常量池中间,但是常量池是什么东西呢?
常量池其实就是在创建类的时候,所类中的所有的常量写到常量池当中。
例:

    String str1 = "abc";
    String str2 = "abc";

    char[] arrch = {'a', 'b', 'c'};
    String str3 = new String(arrch);

    //比较三个Sting的地址                输出的结果:
    System.out.println(str1 == str2);   //true
    System.out.println(str1 == str3);   //false
    System.out.println(str2 == str3);   //false

要据上面的图可以得知,常量池中其实存的也是一个地址,在常量如果相等的情况下,会指向常量池中的同一个地址。常量池中的地址,指向的是一个字节数组,所有的数组最后存的都是字节数组。
而字符数组在在jvm中存储的是按照一个数组来存储的,当String的构造方法调用这个数组的时候,这个数组会转成字符数组的形式,然后再给String类的构造方法。
而用构造方法构造的String类,他是一个对象了,所以不在常量池中在着了,是在堆中随机存储着,所以说,str1 == str2 地址相同,但是str1 == str3str2 == str3地址不相同。

对于引用类型来说,==进行的是地址值的比较。

字符串的操作和使用

比较方法

在我们日常用的时候,如果我们只想比较字符串里面的值,不关心地址,就可用比较方法,所以说java专门写了两个比较的方法。
public boolean equals(Object obj)public boolean equalsIgnoreCase(Sttring str)
上面的两个方法,一个是严格区分大小写的,一个是忽略大小写的。
例:
equals方法的使用:

   String str1 = "ABC";
   String str2 = "ABC";

   char[] arrch = {'A', 'B', 'C'};
   String str3 = new String(arrch);

   //比较三个Sting的地址                输出的结果:
   System.out.println(str1.equals(str2));   //true
   System.out.println(str1.equals(str3));   //true
   //也可心直接和常量进行比较
   String str = null;
   System.out.println(str.equals("ABC"));  //不推荐使用:会报错 => java.lang.NullPointerException(空指针异常)
   System.out.println("ABC".equals(str));  //推荐使用

equalsIgnoreCase方法的使用:

   String str4 = "guo";
   String str5 = "GUO";
   System.out.println(str4.equalsIgnoreCase(str5));    
   //true 但是只能进行英文的忽略大小写比较

获取字符串长度

在日常使用中获取长度和比较是String类里面用的最多的两个方法了。
public int length()
例:

    String str = "dfghjhgfdfg";
    System.out.println("字符串的长度是:"+str.length());
    //字符串的长度是:11

拼接字符串

拼接字符串,也有自己的方法,但是我们在用的时候,一般是直接用‘+’来直接拼接的,没有使用方法。
在拼接字符串的时候,我们要知道,拼接出来的字符串,是和原来的字符串是一点都不相等的,不管用方法还是用‘+’号。就是因为常量不可改变。
方法:public String concat(String str);
例:

    String str1 = "老";
    String str2 = "酒馆";
    System.out.println(str1.concat(str2));
    //老酒馆
    System.out.println(str1 + str2);
    //老酒馆

获取指定位置的单个字符

也是常用的方法:public char charAt(int index);
例:

    String str = "老酒馆的锅";
    char c = str.charAt(2);
    System.out.println("指定位置出来的字符是:" + c);
    //指定位置出来的字符是:馆

查找字符串首次出现的位置索引

在java里面只要是索引就是从0开始的,所以字符串也是。
String里面常用的方法是:public int indexOf(String str);
例:

    String str = "老酒馆的锅";
    int index = str.indexOf("酒馆");
    System.out.println("字符串首次出现的位置索引:"+index);
    //字符串首次出现的位置索引:1

截取字符串

String类里面截取字符串只有一种方法,但是这一种方法有一个重载。
public String substring(int begin)public String substring(int begin,int end) 这两种方法。
第一种方法:

    String str = "老酒馆的锅";
    //从0开始数,在第三个字符串的地方开始往后面截取,包括3
    String substring = str.substring(3);
    System.out.println(substring);  //的锅

第二种方法:

    String str = "老酒馆的锅";
    //从0开始数,在第一个字符串的地方开始往后面截取,包括1
    //但是不包括后面,[1,3);
    String substring = str.substring(1, 3);
    System.out.println(substring);  //酒馆

字符串转换

字符串转换可以在非常多的场景里面用的到,所以String类里面也提供的有技持的方法。
public char[] toCharArray(); 将当前字符串拆分成为字符数组。
public byte[] getBytes(); 获得当前字符串底层的字节数组。
public String replace(CharSequence oldStr,CharSequence newStr); 将所有的老字符串都替换成新的字符串。
toCharArray():

    String str = "老酒馆的锅";
    //转换成字符数组
    char[] chars = str.toCharArray();
    System.out.println(chars[0]);   //老

getBytes():

    String str = "老酒馆的锅";
    //转换成字节数组
    byte[] chars = str.getBytes();
    //这里面对应的是utf-8里面的字符
    System.out.println(chars[0]);   // -24 => 老
    System.out.println(chars[1]);   //-128 =>酒
    System.out.println(chars[2]);   //-127 =>馆

replace(CharSequence oldStr,CharSequence newStr):

    String str = "Hello Word !";
    //把所有的o替换成&号
    String str2 = str.replace("o", "&");
    System.out.println(str2);    //Hell& W&rd !

字符串分割方法

在日常使用中会对有规律的字符串按照对应的规则分成若干份。
public String[] split(String regex);

    String str = "Hello Word !";
    //根据空格进行切分
    String[] strs = str.split(" ");
    for (String s : strs) {
        System.out.println(s);
    }
    /*  分割成三个字符串了
        Hello
        Word
        !
     */
    //有一种特殊的情况,就是根据"."进行切割的时候必须在点前面加上\\
    String s = "aaa.bbb.ccc";
    String[] split = s.split(".");
    System.out.println(split.length);   //0
    String[] split1 = s.split("\\.");
    System.out.println(split1.length);  //3
    //这就说明必须在点的前面加上\\,
    //这是因为在split里面是按照正侧表达式进行切割的,"."具有特殊函意,所以要加上转义字符

以上就是字符串的简单的介绍和使用方法了。



关注公众号,随时获取最新资讯

细节决定成败!
个人愚见,如有不对,恳请斧正!

posted @ 2020-03-27 14:25  一点浩然气~  阅读(481)  评论(0编辑  收藏  举报