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

目录

一、什么是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.==运算符

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

java 复制代码
int a = 10;
int b = 20;
a==b;  // false

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

java 复制代码
String s1 = new String("abc");
String s2 = new String("abc");
s1 == s2; // false
java 复制代码
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的常用成员方法

java 复制代码
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.小练习:对称字符串

java 复制代码
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.小练习:拼接数组内容

java 复制代码
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的用法

java 复制代码
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的常用成员方法

代码示例:

java 复制代码
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.字符串原理小结

相关推荐
西岸行者3 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码3 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习
im_AMBER4 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J4 天前
从“Hello World“ 开始 C++
c语言·c++·学习