Java---第八章(字符串-----String,StringBuilder 和 StringBuffer)
Java---第八章
- 字符串
- String
- 字符串的常用方法
- StringBuilder和StringBuffer
- 常用方法
- 对比String 和StringBuilder 和 StringBuffer
字符串
String
特性:
- String 类位于java.lang包中,无需引入,可直接使用
- String 类是由final修饰的,表示String 类是一个最终类,不能被继承
- String 类构建的对象不可再被更改
package org.device.Device;public class DeviceTest {public static void main(String[] args) {//当使用一个字面量给字符串赋值的时候,首先会去字符串常量池里检测是否//存在其字面量,如果存在//则直接使用这个字面量的地址赋值即可,如果不存在,//则需要在字符串常量池中创建这个字面量,然后//再将地址赋值过去String s = "超用心";s += "在线学习";//这里的字符串拼接发生在堆内存上System.out.println(s);}
}
常见的构造方法:
public String(String original);public String(char value[]);public String(char value[],int offset,int count);public String(byte bytes[]);public String(byte bytes[].int offset,int length);public String(byte bytes[],Charset charset);//字符集
分别解释:
public String(String original);public static void main(String[] args) {String s = "超用心在线学习";System.out.println(s);//这里会创建两个对象,一个是字面量会在常量池中创建一个对象//另一个是new String()构造方法创建出来的对象String s1 = new String("超用心在线学习");System.out.println(s1);}
}
上面有String s = “超用心学习”,下面再创建就会先去常量池里查找,发现有一个,然后只创建一个堆内存对象
public String(char value[]);public String(char value[],int offset,int count);public static void main(String[] args) {char[] values = {'a','d','m','i','n'};String s2 = new String(values);System.out.println(s2);String s3 = new String(values,1,3);//跳过1个,再继续输出3个System.out.println(s3);}
输出:
admin
dmi
public String(byte bytes[]);public String(byte bytes[].int offset,int length);public static void main(String[] args) {byte[] bytes = {97,98,99,100,101,102};String s4 = new String(bytes);System.out.println(s4);String s5 = new String(bytes,2,3);System.out.println(s5);}
输出:
abcdef
cde
字节可以存储整数,字符也可以用整数表示,这个整数就是ASCII码对应的整数值
public String(byte bytes[],Charset charset);//字符集public static void main(String[] args) {byte[] bytes = {97,98,99,100,101,102};Charset charset= Charset.forName("UTF-8");String s6 = new String(bytes,charset);//bytes编码为UTF-8System.out.println(s6);}
字符串的常用方法
获取长度:
public int length();//获取字符串长度
举例:
public static void main(String[] args) {String s1 = "超用心学习";int length = s1.length();System.out.println(length);}
字符串比较:
public boolean equals(Object anObject);//比较两个字符串是否相等public boolean equalsIgnoreCase(String anotherString);
//忽略大小比较两个字符串是否相等
举例:
字符串之间比较时,首先会看两个字符串的长度是否相等,如果相等,再看其中每个字符是否相等
public static void main(String[] args) {String s2 = "abc";String s3 = "abc";String s4 = "ABC";System.out.println(s2.equals(s3));System.out.println(s2.equals(s4));System.out.println(s2.equalsIgnoreCase(s4));}
字符串大小写转换:
public String toLowerCase();//转换成小写public String toUpperCase();//转换成大写
举例:
public static void main(String[] args) {String s2 = "abc";String s4 = "ABC";String s5 = s2.toUpperCase();System.out.println(s5);String s6 = s4.toLowerCase();System.out.println(s6);}
获取字符在字符串中的下标:
public int indexof( int ch);//获取指定字符在字符串中第一次出现的下标public int lastIndexof(int ch);//获取指定字符在字符串中最后一次出现的下标
获取字符串在字符串中的下标:
public int indexof(String str);//获取指定字符串在字符串中第一次出现的下标public int lastIndexof(String str);//获取指定字符串在字符串中最后一次出现的下标
获取字符串中的指定下标的字符:
public char charAt(int index);
举例:
public static void main(String[] args) {String s = "kliy@aliyun.com";int index1 = s.indexOf("@");//打印该字符串中第一个@的下标System.out.println(index1);int index2 = s.lastIndexOf("@");//打印该字符串中最后一个@的下标System.out.println(index2);int index3 = s.indexOf(".");int index4 = s.lastIndexOf(".");boolean case1 = (index1 == index2);boolean case2 = (index3 == index4);boolean case3 = (index3 - index2 > 1);boolean case4 = (index1 > 0 && index4 < s.length());if(case1 && case2 && case3 && case4){System.out.println("字符串"+s+"是一个邮箱地址");}System.out.println(s.charAt(0));//k}
字符串截取:
public String substring(int beginIndex);//从指定开始位置截取字符串,直到字符串末尾public String substring(int beginIndex,int endIndex);
//从指定开始位置到指定结束位置截取字符串
示例:
字符串截取,截取时使用左闭右开区间 [0,4)
public static void main(String[] args) {String s = "Java是一门非常高深的语言";String sub1 = s.substring(0,4);System.out.println(sub1);String sub2 = s.substring(7);System.out.println( sub2);}
输出:
Java
非常高深的语言
字符串替换:
public String replace(char oldChar,char newChar);
//使用新的字符替换字符串中旧的字符public String replace(CharSequence target,CharSequence replacement);
//使用替换的字符串来替换字符串中的字符串public String replaceAll(String regex,String replacement);
//使用替换的字符串来替换字符串中满足正则表达式的字符串
示例:
public static void main(String[] args) {String s = "hello world";String s1 = s.replace('o','a');System.out.println(s1);String s2 = s.replace("o","a");System.out.println(s2);String info = "a1b2c3d4";//regular expresssion 正则表达式//三至五位数字的正则表达式//[1-9][0-9]{2,4}//英文字符串的正则表达式//[a-zA-Z]+//+ 表示任意长度String result = info.replaceAll("[0-9]","");//把其字符串中的数字替换成空}
获取字符数组:
public char[] toCharArray();
获取字节数组:
public byte[] getBytes();.//获取字节数组public byte[] getBytes(Charset cahrset);//获取指定编码下的字节数组
示例:
public static void main(String[] args) {String s = "my god";char[] values = s.toCharArray();for(int i=0;i<s.length();i++){System.out.println(values[i]);}byte[] bytes = s.getBytes();for(int i=0;i<bytes.length;i++){System.out.println(bytes[i]);}byte[] bytes1 = s.getBytes(Charset.forName("GB2312"));System.out.println(bytes1);}
字符串拼接:
public String concat(String str);//将字符串追加到末尾
去除字符串两端的空白字符:
public String trim();
示例:
public static void main(String[] args) {String s1 = "Hello";String s2 = "World";String s3 = s1 + s2;System.out.println(s3);String s4 = s1.concat(s2);System.out.println(s4);String s5 = " ab cd ";String s6 = s5.trim();//将字符串两端空格剪掉System.out.println(s6);}
字符串分割:
public String[] split(String regex);//将字符串按照匹配的正则表达式分割
字符串匹配正则表达式:
public boolean matches(String regex);//检测字符串是否匹配给定的正则表达式
示例:
public static void main(String[] args) {String s = "a1b2c3d4";String[] arr = s.split("[0-9]");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}String personInfo = "刘德华,男,53,很帅气";String[] arr1 = personInfo.split(",");for(int i=0;i<arr1.length;i++){System.out.println(arr1[i]);}String regex = "[a-z0-9]+";boolean match = s.matches(regex);System.out.println(match);}
不得不提到的intern()方法:
public native String intern();
示例:
public static void main(String[] args) {String s1 = "超用心";String s2 = "在线学习";String s3 = s1 + s2;String s4 = "超用心在线学习";System.out.println(s3 == s4);//false//将字符串s3放入常量池,放入时会先检测常量池中是否存在s3字符串,//如果s3已经存在了,s5就直接使用s3的字符串地址即可,//若不存在,就在常量池中创建字符串s3String s5 = s3.intern();System.out.println(s5 == s4);//true}
StringBuilder和StringBuffer
特性介绍:
- 位于Java.lang包中,无需引入,可以直接使用
- 是由final修饰的,表示一个最终类,不可以被继承
- 所构建的对象可以实现字符序列的追加,但不会产生新的对象,只是将这个字符序列保存在字符数组中
构造方法:
以StringBuilder为例,这两个都一样的
public StringBuilder();//构建一个StringBuilder对象,默认容量为16public StringBuilder(int capacity);//构建一个StringBuilder对象并指定初始化容量public StringBuilder(String str);
//构建一个StringBuilder对象,并将指定的字符串存储在其中
示例:
public static void main(String[] args) {StringBuilder sb1 = new StringBuilder();StringBuilder sb2 = new StringBuilder(1024);StringBuilder sb3 = new StringBuilder("超用心学习");}
常用方法
追加:
public StringBuilder append(String str);//将一个字符串添加到StringBuilder存储区public StringBuilder append(StringBuffer sb);
//将StringBuffer存储的内容添加到StringBuffer存储区中
示例:
public static void main(String[] args) {StringBuilder sb1 = new StringBuilder(1024);sb1.append("超用心学习");sb1.append(1);sb1.append(1.0);sb1.append(true);sb1.append('a');System.out.println(sb1);}
输出:
超用心学习11.0truea
删除指定区间存储的内容:
public StringBuilder delete (int start,int end);
//将StringBuilder存储区指定的开始位置到指定的结束位置直接的内容删除
删除存储区指定下标位置存储的字符:
public StringBuilder deleteCharAT(int index);
示例:
public static void main(String[] args) {StringBuilder builder = new StringBuilder("abcdefg");builder.delete(1,5);//区间(1,5),不包括1和5System.out.println(builder);//afgbuilder.deleteCharAt(0);System.out.println(builder);//fg}
在StringBuilder存储区指定偏移位置处插入指定的字符串:
public StringBuilder insert(int offset,String str);
将存储区的内容倒序:
public StringBuilder reverse();
示例:
public static void main(String[] args) {StringBuilder builder = new StringBuilder("admine");builder.reverse();System.out.println(builder);//enimdabuilder.insert(2,",");System.out.println(builder);//en,imda//需要注意的是:length()方法返回的是char[]中使用的数量System.out.println(builder.length());//6}
获取指定字符串在存储区中的位置:
public int indexof(String str);//获取指定字符串在存储区中第一次出现的位置public int lastIndexof(String str);//获取指定字符串在存储区中最后一次出现的位置
例题:
将从控制台输入的数字转换成财务数字(101,111,001.25)(使用StringBuilder完成)
public static void main(String[] args) {//将从控制台输入的数字转换成财务数字(101,111,001.25)//(使用StringBuilder完成)Scanner sc = new Scanner(System.in);System.out.println("请输入一串数字:");double money = sc.nextDouble();StringBuilder builder = new StringBuilder();builder.append(money);int index = builder.indexOf(".");//打印.的下标if(index>3){for (int i=index-3;i>0;i-=3){builder.insert(i,".");}}System.out.println(builder.toString());}
对比String 和StringBuilder 和 StringBuffer
都是用来处理字符串的,在处理少量字符串的时候,它们之间的处理效率几乎没有任何区别,但是处理大量字符串时,
由于String类的对象不可更改,因此在处理字符串会产生新的对象,对内存消耗较大。
StringBuilder和StringBuffer使用的是对字符串的字符数组内容进行拷贝,不会产生新的对象,因此效率较高。
而StringBuffer为了保证在多线程情况下字符数组中的内容正确使用,在每个成员方法上面加了锁,有锁就会增加消耗,因此StringBuffer在处理效率上低于StringBuilder
相关文章:

Java---第八章(字符串-----String,StringBuilder 和 StringBuffer)
Java---第八章 字符串String字符串的常用方法StringBuilder和StringBuffer常用方法 对比String 和StringBuilder 和 StringBuffer 字符串 String 特性: String 类位于java.lang包中,无需引入,可直接使用String 类是由final修饰的ÿ…...
k8s集群的部署
【1】安装docker systemctl enable docker所有节点均需要安装docker,并且使其开机自启,每个节点均部署镜像加速器 【2】配置k8s的yum文件 [rootk8s1 ~]# cd /etc/yum.repos.d/ [rootk8s1 yum.repos.d]# vim k8s.repo [rootk8s1 yum.repos.d]# cat k8s.repo [k8s…...

设计模式——观察者模式
文章目录 1 概述2 实现3 总结 1 概述 观察者模式可以分为观察者和被观察者,观察者通过注册到一个被观察者中,也可视为订阅,当被观察者的数据发生改变时,会通知到观察者,观察者可以据此做出反应。 可以类比订阅报纸&am…...

在Debian 12 上安装 PHP 5.6, 7.4
环境:Debian 12 Debian 12 默认的PHP版本为 8.2 如果直接安装php7.4就出现下面的报错: sudo apt-get install libapache2-mod-php7.4 php7.4 php7.4-gd php7.4-opcache php7.4-mbstring php7.4-xml php7.4-json php7.4-zip php7.4-curl php7.4-imap p…...

微服务——统一网关Getway
为什么需要网关? 网关的两种实现: 网关Getway——快速入门 步骤一 网关背身也是一个微服务,需要注册到nacos中去 步骤二 成功运行后 可以通过网关进行请求转发到对应服务。 流程如下: 路由断言工厂 网关路由可以配置的东西有如下。 spri…...

[ELK安装篇]:基于Docker虚拟容器化(主要LogStash)
文章目录 一:前置准备-(参考之前博客):1.1:准备Elasticsearch和Kibana环境:1.1.1:地址:https://blog.csdn.net/Abraxs/article/details/128517777 二:Docker安装LogStash(数据收集引擎ÿ…...

纪录片《打铁文艺社》:从全美高中生电影节到多项国际赞誉,聚焦城市公共艺术的蜕变之路
7月21日,在全美高中生电影节(All American High School Film Festival,AAHSFF)公布的入围名单中,一部取材于中国深圳的纪录片《打铁文艺社Datie: The Art Tribe of Tiegang》以其深刻的主题和精良的制作,引…...

VLAN---虚拟局域网
VLAN— 虚拟局域网 LAN—局域网 MAN—城域网 WAN—广域网 1.一个VLAN相当于是一个广播域 VLAN—通过路由器和交换机协同工作后,将原本的一个广播域逻辑上,拆 分为多个虚拟的广播域。 VLAN配置: 1.创建VLAN VID—VLAN ID------用来区分和…...

新的CoolSiC™槽沟MOSFET技术,用于低栅氧化物应力和高性能
标题:The new CoolSiC™ Trench MOSFET Technology for Low Gate Oxide Stress and High Performance UPS(Uninterruptible Power Supply)系统也称不间断电源系统,是一种能够提供电力备用的设备,当主电源出现故障或停…...

【开源项目】低代码数据可视化开发平台-Datav
Datav 基本介绍 Datav是一个Vue3搭建的低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。 它的技术栈为:Vue3 TypeScript4 Vite2 ECharts5 Axios Pinia2 在线预览 账号: admin 密码: 123123预…...

【自动话化运维】Ansible常见模块的运用
目录 一、Ansible简介二、Ansible安装部署2.1环境准备 三、ansible 命令行模块3.1.command 模块3.2.shell 模块3.3.cron 模块3.4.user 模块3.5.group 模块3.6.copy 模块3.7.file 模块8ÿ…...
深入理解C语言中的字符指针初始化与用法
字符指针初始化 - C 语言详解 目录 1. 介绍 2. 字符指针初始化的基础 3. 使用 const 关键字的字符指针初始化 4. C 语言与 C 在字符指针初始化的差异 5. 常见陷阱与最佳实践 6. 进阶概念:指针算术与动态内存分配 7. 字符串函数与字符指针 8. 结论介绍 在 C 语言中…...

es添加索引命令行和浏览器添加索引--图文详解
一、添加索引 创建索引 curl -X PUT "localhost:9200/my-index-00001?pretty" 获取索引 curl -X GET "localhost:9200/my-index-000001?pretty" 获取全部的索引 curl -X GET "http://localhost:9200/_cat/indices?v" 获取索引映射 cur…...

Java 大数字运算之 BigDecimal 类
在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中 BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。今天主要讲一下 BigDecimal 类 …...
MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)
文章目录 MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)MySQL二进制日志(Binary log)二进制日志文件的相关配置二进制日志文件的相关参数的说明二进制日志的格式设置二进制日志的格式 二进制…...
MY.CNF
# [client] port 3306 socket /var/lib/mysql/mysql.sock [mysql] prompt "\umysqldb \R:\m:\s [\d]> " no_auto_rehash loose-skip-binary-as-hex [mysqld] user mysql port 3306 #主从复制或MGR集群中,server_id记得要不同 #另外…...

SpringBoot IOC与AOP(一)
IOC AOP 一、 分层解耦 内聚: 软件中各个功能模块内部的功能联系 耦合: 衡量软件中各个层/模块之间的依赖、关联的程度 软件设计原则:高内聚、低耦合 控制反转:Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到…...
JVM运行时数据区——方法区的垃圾回收
方法区的垃圾回收主要是两部分:运行时常量池中废弃的常量和不在使用的类。 类卸载(将不在使用的类回收)的条件: 该类的所有实例均被回收。 加载该类的类加载器被回收(一般很难满足)。 类对象不再引用,通过反射也获取不到。...

LeetCode213.House-Robber-II<打家劫舍II>
题目: 思路: 在版本一中增加了一个条件 那就是首尾相关联。那么只需要进行两次循环即可。 第一次是循环是偷第一家的 那么循环到n-1 截至 并且保存一个cmp 第二次循环是不偷第一家的 循环到n截至。然后比较cmp 与 dp [n] 的最大值即可。 代码是&#…...
订单系统问题汇总
1、项目启动失败 原因是pom中既配置了mybatis又配置了mybatis-plus 2、idea连接后提示缺少MySQL驱动,直接根据提示安装就好 3、解析请求得到的json为对象时候报错,待解析的对象是泛型对象 String regionsInfo OkHttpRequestUtils.sendGetRequest(new…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...