【Java】String类API

创建字符串

字符串字面量"Hello"高效,常量池复用常见、简单的字符串创建
new 关键字new String("Hello")每次创建新对象,性能开销较高显式创建新对象
字符数组new String(char[])转换字符数组字符数组转字符串
StringBuilder/StringBuffersb.toString()可变字符串,高效频繁修改字符串
String.formatString.format()动态格式化动态内容和格式输出
String.valueOfString.valueOf()基本类型和对象转字符串类型转换
String.joinString.join()多字符串高效拼接多个字符串拼接
concat 方法str1.concat(str2)简单拼接简单场景拼接
substringstr.substring(0, 5)提取子串提取部分字符串
String.internstr.intern()常量池优化内存内存优化
字节数组new String(byte[])解码字节数组网络/文件数据转换为字符串

1.字符串字面量

String str = "Hello";

特点

  • 字符串字面量存储在 字符串常量池 中。
  • 如果常量池中已经存在相同的字符串,则不会创建新对象,直接返回池中已有的引用。

适用场景

  • 用于创建重复使用的常量字符串

2.使用new关键字

String str = new String("Hello");

特点

  • 如果字符串常量池没有"Hello"字面量,会先创建一个,然后每次new都会在堆内存中创建一个新的String对象,内容相同的都会引入字符串常量池中的字面量
  • 不推荐直接使用new创建字符串,除非明确需要

适用场景

  • 显式要求在堆内存中创建独立的字符串对象。

3.字节数组

byte[] bytes = "黄小桃".getBytes();
// byte[] bytes = {72, 101, 108, 108, 111}; // ASCII for "Hello"
String string = new String(bytes);
System.out.println(string);

特点

  • 将字节数组解码为字符串。
  • 默认使用平台的字符集,也可指定字符集(如 UTF-8)。

适用场景

  • 从网络、文件中读取的字节数据转换为字符串。

4.字符数组

char[] chars = {'H', 'e', 'l', 'l', 'o'};
String str = new String(chars);

特点

  • 将字符数组转换为字符串。
  • 不会将字符数组的内容直接放入常量池,而是在堆中创建一个字符串对象

适用场景

  • 字符数组需要拼接或转为字符串时

5.使用StringBuilder或StringBuffer

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
String str = sb.toString();

特点

  • 适合频繁修改字符串的场景(如拼接、删除等操作)。
  • StringBuilder 非线程安全StringBuffer 是线程安全的。

适用场景

  • 需要高效地构建字符串,避免频繁创建新对象。

6.使用String.format

        String str = String.format("Hello,%s!", "World");System.out.println(str); // Hello,World!

特点

  • 支持格式化操作,类似于 printf 的功能。
  • 可指定格式控制符(如 %d, %s

%s引用字符串

%d引用整型

适用场景

  • 动态格式化字符串。

7.String.valueOf()转型

int num = 42;
String str = String.valueOf(num);

特点

  • 将基本类型(如 int, double)或对象转为字符串。
  • 如果传入的是 null,返回 "null"

适用场景

  • 将非字符串的基本类型转换为字符串。

8.使用String.join()

特点

  • Java 8 引入的工具方法,用于高效拼接字符串。
  • 可以指定分隔符,拼接多个字符串。

适用场景

  • 多个字符串的高效拼接。

9.使用concat方法

String str1 = "Hello";
String str2 = " World";
String str = str1.concat(str2);

特点

  • 直接拼接两个字符串,功能类似于 +
  • + 不同,concat 只能拼接字符串,不能拼接其他类型。

适用场景

  • 简单的字符串拼接。

10.使用substring

String original = "Hello, World!";
String subStr = original.substring(0, 5); // "Hello"

特点

  • 从原字符串提取子串,生成新的字符串。
  • 新字符串仍然是不可变的。

适用场景

  • 提取部分字符串。

11.使用String.intern()

String str = new String("Hello").intern();

特点

  • 将字符串对象放入字符串常量池,如果池中已存在相同内容的字符串,则返回池中的引用。
  • 用于减少内存占用。

适用场景

  • 手动优化内存使用,减少重复字符串对象。

12.使用Arrays.asListString.join

String str = String.join(", ", Arrays.asList("Apple", "Banana", "Cherry"));

特点

  • 利用 String.joinList 数据实现快速拼接。

适用场景

  • 列表中的数据拼接为字符串。

字符串基本方法

1.获取字符串长度

String str = "Hello";
int length = str.length(); // 5

2.获取字符

String str = "Hello";
char c = str.charAt(1); // 'e'

3.查找子串或字符

String str = "Hello, World!";
int index = str.indexOf("World"); // 7
int lastIndex = str.lastIndexOf('o'); // 8
boolean contains = str.contains("Hello"); // true

4.字符串比较

String str1 = "apple";
String str2 = "banana";boolean isEqual = str1.equals(str2); // false
boolean ignoreCase = str1.equalsIgnoreCase("APPLE"); // true
int compare = str1.compareTo(str2); // 按字典序比较,返回负值表示 str1 < str2

5.判断前缀或后缀

String str = "hello.java";
boolean startsWith = str.startsWith("hello"); // true
boolean endsWith = str.endsWith(".java"); // true

6.判断是否为空

String str = "";
boolean isEmpty = str.isEmpty(); // true

7.字符串截取

String str = "Hello, World!";
String subStr1 = str.substring(0, 5); // "Hello"
String subStr2 = str.substring(7);    // "World!"

8.字符串替换

String str = "Hello, World!";
String replaced = str.replace("World", "Java"); // "Hello, Java!"
String replacedAll = str.replaceAll("\\s", "_"); // 用正则替换,"Hello,_World!"

9.删除前后空格

String str = "   Hello, World!   ";
String trimmed = str.trim(); // "Hello, World!"

10.分割字符串

String str = "Apple,Banana,Cherry";
String[] fruits = str.split(","); // ["Apple", "Banana", "Cherry"]

11.拼接字符串

String joined = String.join("-", "Apple", "Banana", "Cherry"); // "Apple-Banana-Cherry"

12.转换大小写

String str = "Hello";
String upper = str.toUpperCase(); // "HELLO"
String lower = str.toLowerCase(); // "hello"

13.转换为字符数组

String str = "Hello";
char[] chars = str.toCharArray(); // ['H', 'e', 'l', 'l', 'o']

14.转换为字节数组

String str = "Hello";
byte[] bytes = str.getBytes(); // 按默认编码转换

15.格式化字符串

%s引用字符串

%d引用整型

String formatted = String.format("Hello, %s! You have %d messages.", "John", 5);
// 输出: "Hello, John! You have 5 messages."

16.判断字符串是否匹配正则

String str = "123abc";
boolean matches = str.matches("\\d+"); // false(因为包含字母)

17.判断是否为空或仅包含空白字符

String str = "   ";
boolean isBlank = str.trim().isEmpty(); // true

18.字符串构建

StringBuilder 是 Java 中推荐的可变字符串操作类。

但是线程不安全,所以多线程环境下最好用StringBuffer

StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!"); // 拼接字符串
sb.insert(5, " Java"); // 插入字符串
sb.delete(5, 10);      // 删除指定范围的字符
sb.reverse();          // 反转字符串
System.out.println(sb.toString()); // "!dlroW ,olleH"

19.连续空格替换成单个空格

String str = "Hello    World!";
String normalized = str.replaceAll("\\s+", " "); // "Hello World!"

20.保留字符串中的数字

String str = "abc123def456";
String digits = str.replaceAll("\\D", ""); // "123456"

21.替换首尾字符

String str = "123-456-789";
String result = str.replaceFirst("^123", "XXX"); // "XXX-456-789"

22.性能优化-字符串拼接

使用 StringBuilder 代替 + 操作

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {sb.append(i).append(", ");
}
System.out.println(sb.toString());

23.使用intern()减少重复字符串

String.intern() 将字符串放入常量池,避免创建重复对象

String str1 = "Hello".intern();
String str2 = new String("Hello").intern();
System.out.println(str1 == str2); // true

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

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

相关文章

数据结构初阶---二叉树---堆

一、树 1.树的概念 树是一种非线性的数据结构&#xff0c;由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树&#xff0c;根朝上&#xff0c;分支向下。 根结点没有前驱结点&#xff0c;可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…

CocosCreator对配置文件加密

一、加密 1.首先假设你已经将Excel表格数据导出为了json数据 2.然后可以通关nodejs对其进行xor加密 const fs require(fs);// 读取配置文件 const path "hero_info.json"; const data fs.readFileSync(path, utf-8); const jsonObject JSON.parse(data);// XO…

学习 Dockerfile 常用指令

学习 Dockerfile 常用指令 在构建 Docker 镜像时&#xff0c;Dockerfile 文件是一份至关重要的配置文件&#xff0c;它定义了构建镜像的所有步骤。通过在 Dockerfile 中使用不同的指令&#xff08;命令&#xff09;&#xff0c;我们可以控制镜像的构建过程、设置环境、指定执行…

D95【python 接口自动化学习】- pytest进阶之fixture用法

day95 pytest的fixture详解&#xff08;二&#xff09; 学习日期&#xff1a;20241210 学习目标&#xff1a;pytest基础用法 -- pytest的fixture详解&#xff08;二&#xff09; 学习笔记&#xff1a; fixture(autouseTrue) func的autouse是TRUE时&#xff0c;所有函数方法…

C语言 字符串输入输出函数、scanf(“%[^\n]“,)可输入空格 、fgets删除换行符

字符串输入函数&#xff1a; scanf&#xff08;"%s"&#xff0c;数组名&#xff09; gets&#xff08;数组名&#xff09; fgets&#xff08;&#xff09; --- 文件流输入函数 函数原型&#xff1a; int scanf( const char *format, ...…

深度学习camp-第J4周:ResNet与DenseNet结合探索

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务&#xff1a; 探索ResNet和DenseNet的结合可能性本周任务较难&#xff0c;我们在chatGPT的帮助下完成 一、网络的构建 设计一种结合 ResNet 和 Den…

「iOS」通过CoreLocation Framework深入了解MVC架构

「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构 文章目录 「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构前言CoreLocation了解根据需求建模设计属性方法设计协议传值Block传值KVONotification通知方式 总结参考文章 前言 在这个学期的前…

Debezium系列之:使用Debezium采集oceanbase数据库

Debezium系列之:使用Debezium采集oceanbase数据库 一、oceanbase数据库二、安装OceanBase三、安装oblogproxy四、基于Docker的简单采集案例五、生产实际应用案例Debezium 是一个开源的分布式平台,用于监控数据库变化和捕捉数据变动事件,并以事件流的形式导出到各种消费者。D…

线程sleep的时候会释放锁吗

来看一段代码&#xff1a; void task1(mutex &m) {cout << "thread 1 init..." << endl;{std::unique_lock<mutex> lock(m);cout << "thread 1 getLock" << endl;sleep(5);}cout << "thread 1 freeLock&quo…

wordpress建站--如何用Let‘s Encrypt给网站添加免费ssl证书,支持https访问

本文首发网站&#xff1a;https://www.click234.com 默认情况下我们的网站是http访问&#xff0c;为了增加访问安全性&#xff0c;我们需要添加ssl证书&#xff0c;支持采用https方式访问&#xff0c;今天我们来看下怎么创建免费的ssl证书--Lets Encrypt 使用 Certbot 自动化工…

青少年编程与数学 02-004 Go语言Web编程 02课题、依赖管理

青少年编程与数学 02-004 Go语言Web编程 02课题、依赖管理 课题摘要:一、项目结构各目录说明&#xff1a; 二、依赖项三、依赖管理任务四、依赖管理步骤1. 初始化Go Modules项目2. 添加依赖3. 指定依赖版本4. 更新依赖5. 清理未使用的依赖6. 离线工作7. 模块隔离8. 可重现构建 …

Debezium OracleConnection 分析

Debezium OracleConnection 分析 目录 1. 概述2. 核心功能3. 实现分析4. 使用场景5. 示例分析6. 最佳实践7. 总结1. 概述 OracleConnection 是 Debezium Oracle 连接器中的数据库连接管理组件,主要负责: 数据库连接的建立和管理事务控制查询执行元数据操作LogMiner 会话管理…

【每日一练 基础题】[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 暴力破解会超时,用因式分解的平方差公式 a2 2abb2(a)2 a-2abb2(a-b)2 输出整数((a1a2a3…an)-a1-a2-a3-…-an)/2 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);l…

ArrayList源码分析、扩容机制面试题,数组和List的相互转换,ArrayList与LinkedList的区别

目录 1.java集合框架体系 2. 前置知识-数组 2.1 数组 2.1.1 定义&#xff1a; 2.1.2 数组如何获取其他元素的地址值&#xff1f;&#xff08;寻址公式&#xff09; 2.1.3 为什么数组索引从0开始呢&#xff1f;从1开始不行吗&#xff1f; 3. ArrayList 3.1 ArrayList和和…

【C++】- 掌握STL List类:带你探索双向链表的魅力

文章目录 前言&#xff1a;一.list的介绍及使用1. list的介绍2. list的使用2.1 list的构造2.2 list iterator的使用2.3 list capacity2.4 list element access2.5 list modifiers2.6 list的迭代器失效 二.list的模拟实现1. list的节点2. list的成员变量3.list迭代器相关问题3.1…

Docker--Docker Container(容器) 之容器实战

对docker容器的前两篇文章 Docker–Docker Container(容器) 之 操作实例 Docker–Docker Container(容器&#xff09; Mysql容器化安装 我们可以先在Docker Hub上查看对应的Mysql镜像,拉取对应的镜像&#xff1a; 拉取mysql5.7版本的镜像&#xff1a; docker pull mysql:5.7…

ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘

问题&#xff1a; 运行代码时&#xff0c;报错&#xff1a; … File “/home/xzy/anaconda3/envs/groundinggpt/lib/python3.10/site-packages/pytorchvideo/transforms/augmix.py”, line 6, in from pytorchvideo.transforms.augmentations import ( File “/home/xzy/anac…

【汇编语言】内中断(二) —— 安装自己的中断处理程序:你也能控制0号中断

文章目录 前言1. 编程处理0号中断1.1 效果演示1.2 分析所要编写的中断处理程序1.2.1 引发中断1.2.2 中断处理程序1.2.3 中断处理程序do0应该存放的位置1.2.4 中断向量表的修改1.2.5 总结 1.3 程序框架1.4 注意事项1.5 从CPU的角度看中断处理程序1.6 一些问题的思考与解答 2. 安…

华为OD E卷(100分)23-连续字母长度

前言 工作了十几年&#xff0c;从普通的研发工程师一路成长为研发经理、研发总监。临近40岁&#xff0c;本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作&#xff0c;愁肠百结。为了让自己有点事情做&#xff0c;也算提高一下自己的编程能力…

VS2019中无法跳转定义_其中之一情况

我习惯了使用VS2019看stm的代码&#xff1b; 遇到的问题&#xff0c;在导入代码后&#xff0c;发现有些函数调用不能跳转到定义&#xff1b; 问题描述步骤 1、导入代码 2、跳转&#xff0c;无法跳转 1、中文路径 2、删除.vs文件 和网上查的都没办法解决 最后发现是VS不支持 …