当前位置: 首页 > ai >正文

字符串---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.xdnf.cn/news/4895.html

    相关文章:

  • 耳机插进电脑只有一边有声音怎么办 解决方法分享
  • 第十六届蓝桥杯B组第二题
  • 什么是分布式光伏系统?屋顶分布式光伏如何并网?
  • 高质量老年生活:从主动健康管理到预防医学的社会价值
  • 在 Spring Boot 中选择合适的 HTTP 客户端
  • 2025年社交APP安全防御指南:抵御DDoS与CC攻击的实战策略
  • NLP基础
  • 支付宝 SEO 优化:提升小程序曝光与流量的完整指南
  • Kotlin中Lambda表达式和匿名函数的区别
  • RabbitMQ消息的重复消费问题如何解决?
  • jenkins 启动报错
  • 从粗放管控到数字治能——安科瑞智能监测系统助力污水厂能耗下降15%+
  • 如何通过C# 获取Excel单元格的数据类型
  • YOLO算法的基本介绍
  • 【react组件】矩形框选小组件,鼠标左键选中 div,键盘 ESC 清空
  • 【Axios】解决Axios下载二进制文件返回空对象的问题
  • 高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」
  • [Linux网络_70] ARP协议 | RARP | DNS | ICMP协议
  • 无人机电池储存与操作指南
  • 垃圾分类宣教小程序源码介绍
  • Java——包装类
  • (三)毛子整洁架构(Infrastructure层/DapperHelper/乐观锁)
  • vue内写websocket实时订阅
  • 【分享】KK/BD/XL等六大不限速下载
  • Spring Boot中的拦截器!
  • [计算机科学#12]:高级编程语言基本元素,迅速上手编程
  • 制造单元智能化改造与集成技术平台成套实训设备
  • 数据分析怎么做?高效的数据分析方法有哪些?
  • VB.NET Line Input有办法让输入的字符不显示在控制台上吗
  • Flutter 3.29.3 花屏问题记录