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.字符串原理小结

相关推荐
As977_13 分钟前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi16 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
Rattenking17 分钟前
React 源码学习01 ---- React.Children.map 的实现与应用
javascript·学习·react.js
dsywws39 分钟前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
道法自然040240 分钟前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
cuisidong19972 小时前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
南宫理的日知录3 小时前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
数据与后端架构提升之路3 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
一行14 小时前
电脑蓝屏debug学习
学习·电脑