Java基础系列–07_String、StringBuffer和StringBuilder

String类
(1)字符串:字符串是 常量;它们的值在 创建之后不能更改,存储在堆中
如果字符串多次赋值,其实是每次重新赋值的时候程序都先在内存中寻找已开辟的空间是否存在该值;如果找不到,再开辟新的空间存储该对象
(2)构造方法:
A:String s = new String(); //空字符序列
B:String s = new String(char[] chs); //分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
C:String s = new String(char[] chs,int index,int length); //从index到length部分生成字符串
D:String s = new String(String str);
E:String s = “hello”;

(3)字符串的注意事项
A:字符串一旦被赋值,就不能改变。
注意:字符串的值不能改变,但是引用变量可以改变。
B:字符串在作为实参传递给形参时,其实是把地址的值赋给了形参,在形参修改了字符串的内容后,原字符串的内容其实是不变的。

C:字符串的==和equals

(4)成员方法
A: 判断功能
boolean equals(Object obj) //判断字符串是否相同,考虑大小写
boolean equalsIgnoreCase(String str)//判断字符串是否相同,不考虑大小写
boolean contains(String str) //判断字符串是否包含str
boolean startsWith(String str) //判断字符串是否以str开头
boolean endsWith(String str) //判断字符串是否以str结尾
boolean isEmpty() //判断字符串是否为空
B:获取功能
int length() //获取字符串的长度
char charAt(int index) //获取第index位置的字符
int indexOf(int ch) //获取字符串中第一次出现ch字符的索引
int indexOf(String str) //获取字符串中第一次出现str字符串的索引位置
int indexOf(int ch,int fromIndex) //从某个位置开始获取ch字符第一次出现的索引
int indexOf(String str,int fromIndex)//从某个位置开始获取str字符串第一次出现的索引
String substring(int start) //从某个位置开始截取字符串
String substring(int start,int end) //从某个位置开始到某个位置结束截取字符串
C:转换功能
byte[] getBytes() //将字符串转换为byte数组
char[] toCharArray() //将字符串转换为char数组
static String copyValueOf(char[] chs)//将字符数组转换成字符串
static String valueOf(char[] chs) //将字符数组转换成字符串
static String valueOf(int i) //将一个int数转换成字符串
String toLowerCase() //转小写
String toUpperCase() //转大写
String concat(String str) //拼接字符串

D:其他功能
a:替换功能
String replace(char oldChar,char newChar) //将newChar全部替换OldChar,如果OldChar不存在,原字符串直接赋值给替换后字符串
String replace(String oldString,String newString)

b:切割功能
String[] split(String regex) //通过regex切割字符串,切割后会产生一个字符串数组
c:去除两端空格功能
String trim()
d:字典顺序比较功能
int compareTo(String str) //如果str比str1大的话,返回的正数
字符串的比较原理:
第一步:将两个字符串转变为char数组
第二步:逐个比较char数组中的相同元素的大小
相同:继续比较其他元素
不同:返回 第一个数组比较元素的字符减去第二个数组中的同位置元素
注意:若较短的数组长度的最后一位已经比较完了,则返回第一个数组长度减去第二个数组的长度
int compareToIgnoreCase(String str) //忽略大小写比较

因为String变量的值是不可改变的,所以在频繁操作字符串的时候,就会产生极大的垃圾空间,影响程序的运行。而Java提供了可变的 字符串缓冲区StringBuffer和StringBulid解决String带来的问题。

StringBuffer
(1) 线程安全的可变字符序列,字符串可以发生改变的字符串类。 字符串缓冲区类。
(2)构造方法:
A:StringBuffer() //构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
B:StringBuffer(int capacity)//构造一个不带字符,但具有指定初始容量的字符串缓冲区。
C:StringBuffer(String str) //构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
(3)成员方法:
A:添加功能
public StringBuffer append(anyType varName); //在缓冲区的末尾追加
StringBuffer insert(int index,String str); //在指定索引位置添加
B:删除功能
public StringBuffer delete(int start,int end); //从start开始删除到end结束,不包括end位置的字符
StringBuffer delete(0,sb.length); //清空缓冲区
public StringBuffer deleteCharAt(int index); //删除第index位置的字符
C:替换功能
public StringBuffer replace(int start,int end, String str);//替换字符串
void setCharAt(int index ,char); //修改,把指定索引位置的值改成传入的char值
D:截取功能
public String substring(int start); //从start位置开始截取字符串
E:反转功能
public StringBuffer reverse(); //反转字符串的所有字符
F:其他常用的功能
void setLength(int len); //根据传入的len值截取缓冲区的长度
toString() //转换成String
int indexOf(str); //查找str在缓冲区第一次出现的位置
int lastIndexOf(str); //从后向前查找查找str在缓冲区第一次出现的位置

StringBulider
StringBuilder与StringBuffer其实就像是孪生兄弟,使用的方式没有什么太大的区别。但是StringBuild实例不能安全使用多线程。 如果需要同步,那么就使用StringBuffer 。

StringBuilder和StringBuffer
StringBuilder和StringBuffer都是可变的字符序列,适用于需要经常对字符串修改的操作。两者的方法的使用是一样的,区别在于多线程的安全问题。

StringBuilder和StringBuffer与String的区别
StringBuilder和StringBuffeer是可变字符序列;String是不变得,一但被初始化,就不能改变
StringBuilder和StringBuffer的区别
StringBuilder是线程不安全的,所以效率比较高;StringBuffer是线程安全的,效率相对较低(可以解决多线程同步问题)

Original: https://www.cnblogs.com/zhenjungan/p/10613555.html
Author: zhenjungan
Title: Java基础系列–07_String、StringBuffer和StringBuilder

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581892/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MAC安装redis

    一、安装命令使用mac的包管理工具brew一行命令搞定安装。若未安装brew,命令行先输入以下命令安装brew。 /usr/bin/ruby -e “$(curl -f…

    Linux 2023年5月28日
    084
  • redis订阅关闭异常解决

    redis订阅关闭异常解决 应用程序模块订阅redis运行一段时间出现一直重连Redis服务,日志如下: 2019-04-28 10:06:17,551 ERROR org.spr…

    Linux 2023年5月28日
    0106
  • Linux系统编程001–系统IO

    1. 文件系统:用来存储、组织、管理文件的一套方式、协议 2. 文件 文件的属性:i-node唯一表示一个文件的存在与否 文件的内容 3. Linux系统如何实现文件的操作? &a…

    Linux 2023年6月6日
    085
  • bash 教程-5 shell 流程控制 条件判断 重定向 read [MD]

    我的GitHub 我的博客 我的微信 我的邮箱 bqt20094 baiqiantao@sina.com 流程控制 if commands; then commands [elif…

    Linux 2023年5月28日
    0114
  • algorithm 头文件参考

    定义执行算法的 C++ 标准库容器模板函数。 该 <algorithm></algorithm> 库还使用该 #include <initialize…

    Linux 2023年6月7日
    098
  • Vue项目配置CDN

    两篇博客的实现方法不同。 另外:nginx的前端文件路径应该为:/usr/local/nginx/html下。 index.html <head> <meta c…

    Linux 2023年6月7日
    091
  • SQLI-LABS(Less-6)

    Less-6(GET-Double injection-Double Quotes-String) 打开 Less-6页面,可以看到页面中间有一句 Please input the…

    Linux 2023年6月6日
    082
  • Spring Boot中异步请求和异步调用

    一、SpringBoot中异步请求的使用 1、异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在…

    Linux 2023年6月7日
    0105
  • 良许跌宕起伏的2021年

    大家好。我叫梁旭,以前是农民,现在是企业家。 [En] Hello, everyone. I’m Liangxu, a former farmer, and now a…

    Linux 2023年5月27日
    0102
  • Question03-查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

    * SELECT stu.SID, stu.Sname, CAST(AVG(sc.score) AS DECIMAL(18,2)) avg_score FROM Student s…

    Linux 2023年6月7日
    079
  • 离线版centos8安装docker笔记

    嗨嗨哈哈,已经很久没有坐下来胡编乱造一点笔记了,平时云服务器搞惯了,一个命令就安装好了docker了的,但这次生不逢时的新机房就没那么幸运了,有多不逢时超乎想象,不仅仅服务器没有外…

    Linux 2023年6月14日
    084
  • 020 Linux 20个宝藏命令案例

    1 JDK 相关的查找命令 (1)确认是否安装 JDK (2)查找 java 命令目录的位置 (3)查找 java 命令的位置的软链地址 (4)通过软链地址查找 JDK 的安装目录…

    Linux 2023年5月27日
    081
  • bzoj 1191 特别行动队

    一道不错的斜率优化入门题,传送门:bzoj 1911 题目描述稍微有点不太清楚,先解释一下 将n个士兵分成几个连续的组,每一组的战斗力为f(y),其中:f(x)=ax2+bx+c(…

    Linux 2023年6月6日
    093
  • USB转双串口产品设计-RS232串口

    基于USB转2路串口芯片CH342,可以为各类主机扩展出2个独立的串口。CH342芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动程序,可支持Windo…

    Linux 2023年6月7日
    083
  • 最新超详细VMware下CentOS系统安装

    一、了解CentOS系统 CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,中文意…

    Linux 2023年6月15日
    0127
  • Shell脚本编程中的几个问题

    条件语句 正确的写法: if [ $1 = "-f" ] #注意这里,前后方括号和中间的内容之间必须有空格! then commands fi 错误的写法: i…

    Linux 2023年6月14日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球