JavaSE的常用API学习——字符串相关

本文介绍了Java中的API概念,详细讲解了String、StringBuilder、StringBuffer和StringJoiner的用法,包括创建方式、比较、操作方法以及它们之间的区别,重点强调了内存管理和线程安全问题。
摘要由CSDN通过智能技术生成

目录

一、什么是API

二、String字符串

(一)创建String对象的两种方式

1.直接赋值的内存模型

2.new的内存模型

(二)字符串之间的比较==与equals

1.==运算符

2.equls()方法

三、StringBuilder的用法

1.StringBuilder的构造方法

2.StringBuilder的常用成员方法

3.小练习:对称字符串 

4.小练习:拼接数组内容

四、StringBuffer的用法

面试题:对比String、StringBuffer和StringBuilder

五、StringJoiner的用法

1.StringJoiner的构造方法

2.StringJoiner的常用成员方法

3.常见面试题一 

4.常见面试题二

5.字符串原理小结


一、什么是API

        说实话,之前学完了java基础,也不知道API是啥,问了朋友,他也解释不清楚,看了网上的视频才明白。(惭愧惭愧)

        API(Application Programming Interface):应用程序编程接口。就是别人已经写好的东西,我们不需要自己编写,直接使用即可,例如Scanner、Random、Math等。

        Java API指的就是JDK中提供的各种功能的Java类。这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。

二、String字符串

(一)创建String对象的两种方式

案例: 

1.直接赋值的内存模型

当使用双引号直接赋值时,系统会检查该字符串在[字符串常量池]中是否存在:如果不存在,则创建新的;如果存在,则进行复用。这种方法节约内存。

2.new的内存模型

占用内存,不推荐。

(二)字符串之间的比较==与equals

1.==运算符

比较基本数据类型时,比较的是数据值

int a = 10;
int b = 20;
a==b;  // false

在比较引用数据类型时,比较的是地址值

String s1 = new String("abc");
String s2 = new String("abc");
s1 == s2; // false
String s1 = new String("abc"); // 记录堆内存中的地址值
Strinf s2 = "abc"; // 记录字符串常量池中的地址值,没有就创建,有就复用
s1 == s2;  // false

2.equls()方法

说明:Object类中定义的equals()和==的作用是相同的,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。

像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址值是否相同,而是比较两个对象的"实体内容"是否相同。

总结:当一个类中,没有重写过equls()方法,比较的是地址值;重写过equls()方法,比较的是实体内容。

只要想比较字符串的内容,就必须用String里面的方法。

三、StringBuilder的用法

        StringBuilder可以看成是一个容器,创建之后里面的内容是可变的(String不可变),能够提高字符串的操作效率。

1.StringBuilder的构造方法

2.StringBuilder的常用成员方法

StringBuilder sb = new StringBuilder();

// 添加元素
sb.append(1).append(1.23);
sb.append("张三");
sb.append(true);

// 反转元素
sb.reverse();

// 获取长度
System.out.println("长度:"+sb.length());

// 变回字符串
System.out.println(sb.toString());

// 打印对象不是地址值而是属性值
System.out.println(sb);

3.小练习:对称字符串 

Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String next = sc.next();
StringBuilder sb = new StringBuilder();
String s = sb.append(next).reverse().toString();
if(s.equals(next)){
    System.out.println("是对称字符串");
}else {
    System.out.println("不是对称字符串");
}

4.小练习:拼接数组内容

public class StringBuilderDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println(arrTo(arr));
    }

    public static String arrTo(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(",");
            }
        }
        return sb.append("]").toString();
    }
}

四、StringBuffer的用法

StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer insert(int offset, xxx):在指定位置插入xxx
StringBuffer reverse() :把当前字符序列逆转
public int indexOf(String str)
public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串
public int length()
public char charAt(int n )
public void setCharAt(int n ,char ch)

总结:
        增:append(xxx)
        删:delete(int start,int end)
        改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
        查:charAt(int n )
        插:insert(int offset, xxx)
        长度:length();
        *遍历:for() + charAt() / toString()

面试题:对比String、StringBuffer和StringBuilder

相同点:三者都使用char[]存储

不同点:

String:不可变字符序列;

StringBuffer:可变字符序列、效率低、线程安全,如果项目中要使用多线程,则使用StringBuffer;

StringBuilder:可变字符序列、效率高、线程不安全,如果项目中不涉及到多线程,则使用StringBuilder。

注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder会改变其值。

五、StringJoiner的用法

StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。能够提高字符串的操作效率,而且代码编写特别简洁,但是用的较少。

1.StringJoiner的构造方法

2.StringJoiner的常用成员方法

代码示例: 

public class StringJoinerDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};

        StringJoiner sj = new StringJoiner(",", "[", "]");
        for (int i = 0; i < arr.length; i++) {
            sj.add(arr[i] + "");
        }

        System.out.println(sj);
    }
}

3.常见面试题一 

4.常见面试题二

5.字符串原理小结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值