• 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.==运算符

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

    1. int a = 10;
    2. int b = 20;
    3. a==b; // false

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

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

    2.equls()方法

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

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

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

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

    三、StringBuilder的用法

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

    1.StringBuilder的构造方法

    2.StringBuilder的常用成员方法

    1. StringBuilder sb = new StringBuilder();
    2. // 添加元素
    3. sb.append(1).append(1.23);
    4. sb.append("张三");
    5. sb.append(true);
    6. // 反转元素
    7. sb.reverse();
    8. // 获取长度
    9. System.out.println("长度:"+sb.length());
    10. // 变回字符串
    11. System.out.println(sb.toString());
    12. // 打印对象不是地址值而是属性值
    13. System.out.println(sb);

    3.小练习:对称字符串 

    1. Scanner sc = new Scanner(System.in);
    2. System.out.println("请输入一个字符串:");
    3. String next = sc.next();
    4. StringBuilder sb = new StringBuilder();
    5. String s = sb.append(next).reverse().toString();
    6. if(s.equals(next)){
    7. System.out.println("是对称字符串");
    8. }else {
    9. System.out.println("不是对称字符串");
    10. }

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

    1. public class StringBuilderDemo {
    2. public static void main(String[] args) {
    3. int[] arr = {1, 2, 3};
    4. System.out.println(arrTo(arr));
    5. }
    6. public static String arrTo(int[] arr) {
    7. StringBuilder sb = new StringBuilder();
    8. sb.append("[");
    9. for (int i = 0; i < arr.length; i++) {
    10. if (i == arr.length - 1) {
    11. sb.append(arr[i]);
    12. } else {
    13. sb.append(arr[i]).append(",");
    14. }
    15. }
    16. return sb.append("]").toString();
    17. }
    18. }

    四、StringBuffer的用法

    1. StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
    2. StringBuffer delete(int start,int end):删除指定位置的内容
    3. StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
    4. StringBuffer insert(int offset, xxx):在指定位置插入xxx
    5. StringBuffer reverse() :把当前字符序列逆转
    6. public int indexOf(String str)
    7. public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串
    8. public int length()
    9. public char charAt(int n )
    10. 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的常用成员方法

    代码示例: 

    1. public class StringJoinerDemo {
    2. public static void main(String[] args) {
    3. int[] arr = {1, 2, 3};
    4. StringJoiner sj = new StringJoiner(",", "[", "]");
    5. for (int i = 0; i < arr.length; i++) {
    6. sj.add(arr[i] + "");
    7. }
    8. System.out.println(sj);
    9. }
    10. }

    3.常见面试题一 

    4.常见面试题二

    5.字符串原理小结

  • 相关阅读:
    在Ubuntu上通过Portainer部署微服务项目
    pymysql连接Mariadb/Mysql出现错误(配置正确情况下)解决办法
    组合索引实例
    预约到家按摩小程序开发定制同城服务
    【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层
    vue 项目全局<meta>添加自定义内容
    Promise 静态 API 的使用方法
    什么是著作权?对此你了解多少?
    Java:使用Socket实现内网穿透---本地通信&跨网络通信(可给他人或自己发送文件、信息)
    华为OD技术面试-连接后等于目标字符串的字符串对串-2024手撕代码真题
  • 原文地址:https://blog.csdn.net/Helen_1997_1997/article/details/133656262