String字符串

String类

实例化方式

  • String类是引用数据类型,该类实例化方式有两种:

    1. 直接赋值

    2. 构造方法实现其实例化

public class Str {

    public static void main(String[] args) {
        //直接赋值
        String str1 = "abc";
        System.out.println(str1);//输出abc

        //构造方法实现实例化——将字符数组中的元素变为一个字符串
        char[] data = {'a','b','c'}; 
        String str = new String(data);
        System.out.println(str);//输出abc

    }

实例化方式区别

  • 直接赋值,这种方式会出现常量池数据共享的现象:
public class Str {

    public static void main(String[] args) {

        String str1 = "abc";
        //执行“String str1 = ”abc“;”后,JVM在常量池中开辟空间存放一个abc字符串空间并让str1指向该对象;
        System.out.println(str);//输出abc
    }


----------
public class Str {

    public static void main(String[] args) {

        String str1 = "abc";
        String str2 = "abc";
        String str3= "def";
        System.out.println(str1);//输出abc
        System.out.println(str2);//输出abc
        System.out.println(str3);
    }

//分析:
 1、执行“String str1 = ”abc“;”后,
 JVM在常量池中开辟空间存放一个abc字符串空间并让str1指向该对象;

 2、执行“String str2 = ”abc“;”时,
 JVM会先检查常量池中是否已经存在了一内容为abc的空间,
上面的代码等同于下面代码:
    String str1 = "abc";
    String str2 = str1 ;

 3、执行“String str3 = ”def“;”时,
 JVM会先检查常量池中是否已经存在了一个内容为def的空间,
 由于不存在,所以JVM在常量池中新开辟一个空间存放def并让str3指向该空间;
  • 构造方法实现其实例化,这种方式每new一次就会创建新的对象
public class Str {

    public static void main(String[] args) {

        String str = "abc";
        String str1 = new String(str);
        String str2 = new String(str);
        System.out.println(str1);
        System.out.println(str2);
    }

//分析:

    1、执行“String str = ”abc“;”后,
    JVM在常量池中开辟存放abc的空间并让str指向该空间;

    2、执行“String str1 = new String(str);”时,
    JVM直接创建一个【新的对象】并让str1指向该对象;

    3、执行“String str2 = new String(str);”时,
    JVM再次创建一个【新的对象】并让str2指向该对象;

常用方法

  • length() 该方法返回字符串的长度
public class StringTest {

    public static void main(String[] args) {
        String str = "Timmy Xu";
        int length = str.length();
        System.out.println(length);//输出8,包括空格
    }
}
  • startsWith(String value) 判断字符串是否以value字符串开头,如果是返回true,否则返回false:
public class StringTest {

    public static void main(String[] args) {
        String str = "Timmy Xu";
        System.out.println(str.startsWith("Timmy"));//输出true
        System.out.println(str.startsWith("timmy"));//输出false
    }
}
  • endsWith(String value) 判断字符串是否以value字符串结尾,如果是返回true,否则返回false:
public class StringTest {

    public static void main(String[] args) {
        String str = "Timmy Xu";
        System.out.println(str.endsWith("Xu"));//输出true
        System.out.println(str.endsWith("xu"));//输出false
    }
}
  • equalsIgnoreCase (String value) 用于判断两个字符串忽略大小写后是否相同,相同返回true,否则返回false。
  • equals(String targetString) 用于判断两个字符串是否相同完全相同返回true,否则返回false:
public class StringTest {

    public static void main(String[] args) {
        String str1 = "Timmy Xu";
        String str2 = "Timmy Xu";
        String str3 = "Xu Timmy";
        String str4 = "timmy xu";

        boolean result1 = str1.equals(str2);
        System.out.println(result1);//输出true
        boolean result2 = str1.equals(str3);
        System.out.println(result2);//输出false

        boolean result3 = str1.equals(str4);
        System.out.println(result3);//输出false
        boolean result4 = str1.equalsIgnoreCase(str4);
        System.out.println(result4);//输出true

    }
}

String 类equals方法和==区别:
  • String类中的equals方法用于判断两个字符串内容是否相同:

  • 如果所比较的两个变量是引用类型,则==用于比对两个变量指向的是否为同一个存放数据的地址

  • 如果是基本数据类型的两个变量进行比较,则比较的是是否相等:
public class StringTest {

    public static void main(String[] args) {
        String str1 = "Timmy Xu";
        String str2 = "Timmy Xu";
        String str3 = new String(str1);

        boolean result1 = str1==str2;
        System.out.println(result1);//输出true
        boolean result2 = str1==str3;
        System.out.println(result2);//输出false
    }
}

  • toCharArray() 将字符串转换为char类型的数组
public class StringTest {

    public static void main(String[] args) {
        String str = "ABCDEFG";
        char[] array = str.toCharArray();
        for(char data:array) {
            System.out.print(data+"+");//输出A+B+C+D+E+F+G+
        }
    }
}

这里写图片描述

public class StringTest {

    public static void main(String[] args) {
        String str = "ABCDEFGBSFVGBFJK";
        String s1 = str.replace("ABC","XWZ");
        System.out.println(s1);
        //用"XWZ"代替"ABC",输出XWZDEFGBSFVGBFJK

        String[] array = str.split("B");
        for(int i=0;i<array.length;i++) {
            System.out.println(array[i]);
        }
    //输出三个以B字符分割的数组:A CDEFG SFVG

        String str1 = "  fy    tz  ";
        str1 = str1.trim();
        System.out.println(str1);
        //输出 "fy    tz"
        str1 = str1.replaceAll(" ", "");
        System.out.println(str1);
        //输出 "fytz"
    }
}

这里写图片描述
这里写图片描述

public class StringTest {

    public static void main(String[] args) {
        String str = "ABCBCB";
        System.out.println(str.lastIndexOf("CB", 3));//输出2
        System.out.println(str.lastIndexOf("CB", 4));//输出4

    }
}

Java API文档

这里写图片描述


StringBuffer类

  • StringBuffer类也可以存放字符串,和String类不同的是,StringBuffer字符串代表的是可变的字符序列,可以对字符串对象内容进行修改。
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值