字符串---Spring字符串基本处理

一、String类的特性
  1. 不可变性
    String对象一旦创建,内容不可更改,任何修改操作都会生成新对象。
  2. 字符串常量池
    字符串字面量(如"abc")直接存储在常量池中,重复字面量共享同一内存地址。
  3. 创建方式

虽然都是字符串但在Java中,字符串的存储位置取决于其创建方式:通过字面量(如"abc")创建的字符串存储在字符串常量池中,而通过new String()创建的字符串对象则存储在堆内存中。此外,字符串常量池的具体位置随JDK版本不同而变化(如JDK1.7后移至堆内存)

String s1 = "直接赋值";          // 常量池中创建
String s2 = new String("new对象"); // 存储在堆中,创建新对象

二、字符串创建与初始化
1. 构造方法
//最直接最常用的方法
String s1 = "abc";
System.out.println(s1);//abc//使用new的方式来获取一个字符串对象
String s2 = new String();//传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象
String s3 = new String("abc");//将一个字符数组变成字符串,根据字符数组的内容再创建一个新的字符串对象
char[] chs = {'a', 'b', 'c', 'd'};
String s4 = new String(chs);//传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
byte[] bytes = {97, 98, 99, 100};
String s5 = new String(bytes);//abcd
2. 内存存储方式

栈内存中存放的是方法,方法运行时会压栈;

堆内存中存放的是对象,new出来的实例对象都会跑到这里来;

方法区存放的是字节码文件,用到什么类就把他的字节码文件临时加载到方法区中;

但是,在有一块特殊的代码区就是“串池”,采用直接赋值的方式创造出来的字符串都在串池里面,而串池就在堆内存中放着;

当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在;如果不存在则创建新的;如果存在则复用;

3. “==”的功能

“==”比较的是基本数据类型时,比较的是值,但是如果比较的是引用数据类型那一定是地址值;字符串当然是引用数据类型,只是他们的地址值因为构造函数的不同被存储到串池和堆中,但始终也是不同的地址值;

如果非要比较字符串的值就使用equals方法;


三、常用查询方法

方法

功能

示例

length()

返回字符串长度

"Hello".length() → 5

charAt(int index)

获取指定索引的字符

"Java".charAt(1) → 'a'

indexOf(String str)

查找子串首次出现的位置

"apple".indexOf("p") → 1

lastIndexOf(String str)

查找子串最后一次出现的位置

"apple".lastIndexOf("p") → 2

contains(CharSequence s)

判断是否包含子串

"Hello".contains("ell") → true

startsWith(String prefix)

判断是否以指定字符串开头

"file.txt".startsWith("file") → true

endsWith(String suffix)

判断是否以指定字符串结尾

"file.txt".endsWith(".txt") → true


四、字符串操作与修改
  1. 拼接与格式化
    • concat(String str):拼接字符串(效率低于+StringBuilder
    • String.format(String format, Object... args):格式化字符串
String s = String.format("Name: %s, Age: %d", "Tom", 25);
//Name: Tom, Age: 25

说明符

作用

%s

字符串

%d

十进制整数

%f

浮点数

%n

换行符(平台无关)

%b

布尔值(true/false

%t

日期/时间(需搭配附加符号,如 %tF 表示 YYYY-MM-DD

%%

转义为普通 % 符号

public class FormatExample {public static void main(String[] args) {// 混合使用多种格式String result = String.format("用户: %s%n余额: %,.2f 元%n注册日期: %tF","王五", 2500.5, new Date());System.out.println(result);}
}
// 用户: 王五
// 余额: 2,500.50 元
// 注册日期: 2023-10-05
    • String.join(delimiter, elements):用分隔符连接多个字符串
String.join("-", "2023", "08", "30"); // "2023-08-30"
  1. 子字符串提取
// 提取方法substring,一般有俩参数,第一个是开始的索引,第二个是结束的索引,含左去右
// 如果只有一个参数就是截取到末尾
// 注意,此方法并不影响原字符串,只是单纯截取你索引中的字符串而已
String substr = "HelloWorld".substring(5);      // "World"
String substr2 = "HelloWorld".substring(0,5);  // "Hello"
  1. 替换操作
String s = "abac".replace('a', 'Z');  // "ZbZc"(替换所有匹配字符)
String s2 = "aabbaabb".replaceAll("aa", "XX");  // "XXbbXXbb"(正则替换)
String s3 = "aabbaabb".replaceFirst("aa", "XX"); // "XXbbaabb"
  1. 大小写转换
String upper = "hello".toUpperCase(); // "HELLO"
String lower = "JAVA".toLowerCase();  // "java"
  1. 去除空格
String trimmed = "  text  ".trim();  // "text"(去除首尾空格)
// JDK 11+ 新增 strip() 去除Unicode空格
  1. 分割字符串
String[] parts = "a,b,c".split(","); // ["a", "b", "c"]
// 正则分割:按数字分割
String[] arr = "a1b2c3".split("\\d+"); // ["a", "b", "c"]

五、字符串比较
  1. 内容比较
boolean isEqual = str1.equals(str2);      // 区分大小写
boolean isEqualIgnoreCase = str1.equalsIgnoreCase(str2); // 忽略大小写
  1. compareTo方法
    按字典序比较,返回差值:
"apple".compareTo("banana"); // 返回负数('a'在'b'前)
  1. ==equals区别
    ==比较对象地址,equals比较内容。
String s1 = "abc";
String s2 = new String("abc");
s1 == s2;          // false(地址不同)
s1.equals(s2);     // true(内容相同)

六、其他工具方法
  • 空字符串检查
boolean isEmpty = str.isEmpty();    // JDK 6+
boolean isBlank = str.isBlank();    // JDK 11+(检查空格或空)
  • 重复字符串
String repeated = "abc".repeat(3); // JDK 11+ → "abcabcabc"

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

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

    相关文章

    26考研——中央处理器_CPU 的功能和基本结构(5)

    408答疑 文章目录 一、CPU 的功能和基本结构CPU 的功能CPU 的基本结构运算器控制器 CPU 的寄存器运算器中的寄存器控制器中的寄存器 八、参考资料鲍鱼科技课件26王道考研书 九、总结 一、CPU 的功能和基本结构 CPU 的功能 中央处理器(CPU)由运算器和控…

    传统数据展示 vs 可视化:谁更打动人心?

    数据,每天都在我们身边流动:从你手机里的健康步数,到企业财报中的营收增长,再到国家发布的经济指标。但问题是——你怎么“看”这些数据? 过去,我们习惯用表格、文字和报告来展示数据,这种方式…

    Base64 编码原理详细解析

    Base64 编码是一种常见的数据编码方式,它将二进制数据转化为可打印的 ASCII 字符串。Base64 编码广泛应用于电子邮件、URL 编码、HTTP 请求和响应中等场景。它的核心作用是让二进制数据可以通过仅支持文本的协议或媒介进行传输。本文将更深入地探讨 Base64 编码的原…

    一周学会Pandas2 Python数据处理与分析-Pandas2数据排序操作

    锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 2提供了多种灵活的数据排序方法,主要针对 DataFrame 和 Series 对象。 1. 按值排序:s…

    计算机二级(C语言)已过

    非线性结构:树、图 链表和队列的结构特性不一样,链表可以在任何位置插入、删除,而队列只能在队尾入队、队头出队 对长度为n的线性表排序、在最坏情况下时间复杂度,二分查找为O(log2n),顺序查找为O(n),哈希查…

    Windows Server 2025开启GPU分区(GPU-P)部署DoraCloud云桌面

    本文描述在ShareStation工作站虚拟化方案的部署过程。 将服务器上部署 Windows Server、DoraCloud,并创建带有vGPU的虚拟桌面。 GPU分区技术介绍 GPU-P(GPU Partitioning) 是微软在 Windows 虚拟化平台(如 Hyper-V)中…

    Android RxJava框架分析:它的执行流程是如何的?它的线程是如何切换的?如何自定义RxJava操作符?

    目录 RxJava是什么?为什么使用。RxJava是如何使用的呢?RxJava如何和Retrofit一起使用。RxJava源码分析。 (1)他执行流程是如何的。(2)map(3)线程的切换。 如何自定义RxJava操作符…

    QT的初始代码解读及其布局和弹簧

    this指的是真正的当前正在显示的窗口 main函数: Widget w是生成了一个主窗口,QT Designer是在这个主窗口里塞组件 w.show()用来展示这个主窗口 头文件: namespace Ui{class Widget;}中的class Widget和下面的class Widget不是一个东西 Ui…

    什么是AI写作

    一、AI写作简介 AI 写作正在成为未来 10 年最炙手可热的超级技能。已经有越来越多的人通过 AI 写作,在自媒体、公文写作、商业策划等领域实现了提效,甚至产生了变现收益。 掌握 AI 写作技能,不仅能提高个人生产力,还可能在未来的 …

    13.原生测试框架Unittest解决用例组织问题 与测试套件的使用

    13. 原生测试框架Unittest解决用例组织问题 与测试套件的使用 一、测试架构核心组件解析 1.1 系统组成模块 #mermaid-svg-bYie0B3MLRp0HL4g {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bYie0B3MLRp0HL4g .erro…

    UE5 脚部贴地不穿过地板方案

    UE自带的IK RIG和ControlRig技术 【UE5】角色脚部IK——如何让脚贴在不同斜度的地面(设置脚的旋转)_哔哩哔哩_bilibili 实验后这个还是有一部分问题,首先只能保证高度不能穿过,但是脚步旋转还是会导致穿模 IK前,整个模型在斜坡上会浮空 参考制作:https://www.youtube.com/w…

    关于 js:4. 异步机制与事件循环

    一、同步 vs 异步 1. 什么是同步(Synchronous) 同步代码就是一行一行、按顺序执行的。当前行没有执行完,下一行不能动。 示例: console.log("A"); console.log("B"); console.log("C");输出&am…

    如何通过外网访问内网?对比5个简单的局域网让互联网连接方案

    在实际应用中,常常需要从外网访问内网资源,如远程办公访问公司内部服务器、在家访问家庭网络中的设备等。又或者在本地内网搭建的项目应用需要提供互联网服务。以下介绍几种常见的外网访问内网、内网提供公网连接实现方法参考。 一、公网IP路由器端口映…

    java的输入输出模板(ACM模式)

    文章目录 1、前置准备2、普通输入输出API①、输入API②、输出API 3、快速输入输出API①、BufferedReader②、BufferedWriter 案例题目描述代码 面试有时候要acm模式,刷惯leetcode可能会手生不会acm模式,该文直接通过几个题来熟悉java的输入输出模板&…

    什么是移动设备管理(MDM)

    移动设备管理(MDM)是一种安全解决方案,旨在监控、管理和保护企业的移动设备(包括智能手机、平板电脑、笔记本电脑和计算机)。MDM软件是IT部门的关键工具,其核心功能包括设备配置、安全策略实施、远程控制及…

    c++中构造对象实例的两种方式及其返回值

    c中,构造对象实例有两种方式,一种返回对象实例,一种返回该对象实例的指针。如下所示: 一、两种返回值 RedisConn conn1; //得到实例conn1;RedisConn *conn2 new RedisConn();//得到指针conn2;RedisConn conn3 new RedisConn()…

    【Unity笔记】PathCreator使用教程:用PathCreator实现自定义轨迹动画与路径控制

    在Unity开发过程中,角色移动、摄像机动画、轨道系统、AI巡逻等功能中,路径控制是常见又复杂的需求之一。如何优雅、高效地创建路径并控制对象沿路径运动,是游戏开发、动画制作乃至工业仿真中的关键问题。 在这篇文章中,我将介绍一…

    JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码

    本文项目编号 T 180 ,文末自助获取源码 \color{red}{T180,文末自助获取源码} T180,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

    [人机交互]交互设计过程

    *一.设计 1.1什么是设计 设计是一项创新活动,旨在为用户提供可用的产品 –交互设计是“设计交互式产品、以支持人们的生活和工作” 1.2设计包含的四个活动 – 识别用户的需要( needs )并建立需求( requirements &…

    1. 视频基础知识

    1. 图像基础概念 像素:像素是一个图片的基本单位,pix是英语单词picture,加上英语单词“元素element”,就得到了pixel,简称px。所以“像素”有“图像元素”之意。分辨率:指的是图像的大小或者尺寸。比如 19…