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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129167.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

航拍飞行器经营商城小程序的作用是什么

航拍人群越来越越多&#xff0c;一款靠谱的装备往往能达到预期效果&#xff0c;随着互联网信息传播度加深&#xff0c;也吸引了大批同样的爱好者加入航拍序列。 对航拍飞行器企业/经营商来说&#xff0c;市场增幅下也带来了不少商机&#xff0c;然在实际销售及客户赋能方面还是…

深度学习纯小白如何从零开始写第一篇论文?看完这篇豁然开朗!

&#x1f4e2;前言 上个月小贾消失了一段时间&#xff0c;原因就是。。。 写论文去啦&#xff01;&#xff01;&#xff01; 先拿我导的认可镇个楼&#xff1a; 本篇文章将分享我个人从迷茫地找方向→苦苦做了48次实验才高效涨点→写论文到头秃等等一系列真实经历&#xff0c…

JDBC介绍

JDBC介绍 JDBC就是使用java语言来操作数据库的一套API&#xff0c;可以操作不同类型的关系性数据库。各种数据库编写自己数据库的驱动来实现JDBC这套接口&#xff0c;从而实现通过java代码来操作不同类型的关系性数据库。各个数据库的驱动jar包就是实现该接口的实现类&#xf…

LeetCode 143.重排链表

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 分析题目后我们可以直接进行模拟实现。 具体用到的就是我们之前的知识的结合&#xff0c;首先使用快慢指针找到链表的中间结点。然后将后半段链表给翻转一下&#xff0c;然后再让这…

【AI】深度学习——人工智能、深度学习与神经网络

文章目录 0.1 如何开发一个AI系统0.2 表示学习(特征处理)0.2.1 传统特征学习特征选择过滤式包裹式 L 1 L_1 L1​ 正则化 特征抽取监督的特征学习无监督的特征学习 特征工程作用 0.2.2 语义鸿沟0.2.3 表示方式关联 0.2.4 表示学习对比 0.3 深度学习0.3.1 表示学习与深度学习0.3.…

Prompt-Tuning(一)

一、预训练语言模型的发展过程 第一阶段的模型主要是基于自监督学习的训练目标&#xff0c;其中常见的目标包括掩码语言模型&#xff08;MLM&#xff09;和下一句预测&#xff08;NSP&#xff09;。这些模型采用了Transformer架构&#xff0c;并遵循了Pre-training和Fine-tuni…

System Generator学习——使用 AXI 接口和 IP 集成器

文章目录 前言一、目标二、步骤1、检查 AXI 接口2、使用 System Generator IP 创建一个 Vivado 项目3、创建 IP 集成设计&#xff08;IPI&#xff09;4、实现设计 总结 前言 在本节中&#xff0c;将学习如何使用 System Generator 实现 AXI 接口。将以 IP 目录格式保存设计&am…

《DevOps 精要:业务视角》- 读书笔记(三)

DevOps 精要:业务视角&#xff08;三&#xff09; 第3章 原则3.1 价值流3.2 部署流水线3.3 一切都应存储在版本控制系统中3.4 自动化配置管理3.5 完成的定义3.6 小结 第3章 原则 将原则从实践中分离出来&#xff0c;这是一种很有用的做法。当然了&#xff0c;这两个词分别有着…

【计算机网络黑皮书】传输层

【事先声明】 这是对于中科大的计算机网络的网课的学习笔记&#xff0c;感谢郑烇老师的无偿分享 书籍是《计算机网络&#xff08;自顶向下方法 第6版&#xff09;》 需要的可以私信我&#xff0c;无偿分享&#xff0c;课程简介下也有 课程链接 目录 传输服务与协议网络层与传输…

Vue3实现div拖拽改变宽高

效果图如下&#xff1a; 底部拖拽按钮点击拖拽可自定义父容器的宽高 <template><div id"business_plane"><div class"business_plane" ref"container"><div class"darg_tool"><el-icon class"drag_H…

LeetCode 1277. 统计全为 1 的正方形子矩阵【动态规划】1613

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

JAVA NIO深入剖析

4.1 Java NIO 基本介绍 Java NIO(New IO)也有人称之为 java non-blocking IO是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方…