跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java String 类常用方法详解

Java String 类的核心功能,包括构造方法、内存中的不可变性、字符串比较(equals、compareTo)、查找(indexOf)、类型转换(valueOf、parseInt)、替换与拆分(replace、split)、截取(substring)以及 trim 方法。通过代码示例展示了各方法的使用场景及注意事项,如空指针判断、大小写转换及正则分割等细节。

筑梦师发布于 2026/3/30更新于 2026/10/25108 浏览
Java String 类常用方法详解

String

1. String 的构造方法

String s 本来是字符串常量的引用,应该打印地址,但是编译器重写了 toString 方法,所以打印 hello。

public class test {
    public static void main(String[] args) {
        // 用常量字符串构造
        String s1 = "hello";
        System.out.println(s1);
        // 用字符数组构造
        char[] array = new char[]{'a', 'b', 'c'};
        String s2 = new String(array);
        System.out.println(s2);
        char[] array1 = new char[]{'a', 'b', 'c'};
        String s4 = new String(array, 0, 2); // 从 0 位置后拿 2 个字符
        System.out.println(s4);
        // 直接 new String 对象构造
        String s3 = new String("hello");
        System.out.println(s3);
    }
}

2. String 对象在内存中的情况

(此处涉及内存模型图示,略)

3. 空指针异常和空字符串

使用 isEmpty() 判断是否为空字符串。

字符串比较

  1. s1 == s2 比较地址
  2. s1.equals(s2) 比较是否相等,返回 true 或者 false
  3. s1.compareTo(s2) 比较大小
  4. s1.compareToIgnoreCase(s2) 忽略大小写比较
public class test {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("Hello");
        System.out.println(s1 == s2); // 不等于,s1 和 s2 表示对象的引用都存的是地址
        System.out.println(s1.equals(s2));
        System.out.println(s1.compareTo(s2)); // s1 大于 s2 返回正数;s1 小于 s2 返回负数;s1 等于 s2 返回 0
        System.out.println(s1.compareToIgnoreCase(s2)); // 忽略大小写比较
    }
}

字符串查找

  1. char charAt(int index):返回数组中下标对应的字符
public static void main(String[] args) {
    String s1 = new String("hello");
    char ch = s1.charAt(1);
    System.out.println(ch); // e
}
  1. int indexOf(char ch):返回第一次出现 ch 字符的下标
String s2 = new String("hello");
int index = s2.indexOf('l');
System.out.println(index); // 2
  1. int indexOf(char ch, int k):k 表示下标,从指定位置开始查找
String s2 = new String("hello");
int index = s2.indexOf('l', 3);
System.out.println(index); // 3
  1. int indexOf(String s):可以查找子串在主串中出现的位置,如果没有找到返回 -1
String s3 = "ababcdeabcf";
int index = s3.indexOf("abc");
System.out.println(index); // 2
int index1 = s3.indexOf("abc", 3);
System.out.println(index1); // 7 
  1. int lastIndexOf(String s):倒着往前找,返回第一个找到的下标
String s3 = "ababcabcd";
int index = s3.lastIndexOf("abc");
System.out.println(index); // 5
int index1 = s3.lastIndexOf("abc", 4);
System.out.println(index1); // 2 // 从 4 下标位置倒着往前找

转化

  1. 数字和字符串之间的转化
String s2 = String.valueOf(new Student("zhangsan", 20));
System.out.println(s2);
String s3 = String.valueOf(123);
System.out.println(s3);
String s4 = String.valueOf(123.34);
System.out.println(s4);
String s5 = String.valueOf(true);
System.out.println(s5); // true
  1. 字符串转数字
int a = Integer.parseInt("190");
System.out.println(a);
int b = Integer.parseInt("19.9"); // 错误,给的要是整数的字符串
  1. 大小写转化

小写转大写:toUpperCase。转变为大写不是在原有字符串的基础上转换,而是转变为大写是一个新的对象,不会改变原有的字符串。

String s = "hello";
String ret = s.toUpperCase();
System.out.println(ret);

大写转小写:

String s = "HEllo";
String ret = s.toLowerCase();
System.out.println(ret); // hello
  1. 字符串转为数组
String s = "hello";
char[] ret = s.toCharArray();
System.out.println(Arrays.toString(ret)); // [h,e,l,l,o]

数组转为字符串:

char[] ret = {'a', 'b', 'c'};
String s = new String(ret);
System.out.println(s); // abc
  1. 格式转换
String s = String.format("%d-%d-%d", 2019, 9, 20);
System.out.println(s); // 2019-9-20

字符串替换

  1. 替换字符串
  2. 替换单个字符
  3. 替换第一个 ab
  4. 把所有的 ab 都替换为 123

字符串拆分

  1. s.split() 以这里面的字符串为标准分割
public static void main(String[] args) {
    String s = "hello world k";
    String[] array = s.split(" ");
    System.out.println(Arrays.toString(array)); // [hello,world,k]
    String s1 = "hello world k";
    String[] array1 = s.split(" ", 2); // 以空格分割最多分成两组
    System.out.println(Arrays.toString(array1)); // [hello, world k]
}
  1. 特殊的情况,使用转义字符

多次分割

字符串截取(常用)

  1. substring(a,b) [a,b) a 和 b 均为下标
String str = "hello";
String ret = str.substring(0, 3); // hel
  1. 给一个参数,会把后面的全不截取
String str = "hello";
String ret = str.substring(0); // hello
  1. trim(),去掉字符串的左右空格,中间的空格不可去掉

字符串的不可变性

  1. 字符串中的 value[] 数组是被 private 修饰的,也没有提供 get 方法,在类外是无法拿到的,就无法修改该数组了
  2. 而被 final 修饰的,只是表明它是常量了,它的引用只能指向一个对象,不能被改变成指向别的对象
  3. 被 final 修饰的不能被继承
final int[] array = {1, 2, 3};
// array = new int[]{1,2}; // 不能改变 array 的指向了
array[0] = 2; // 可被修改

目录

  1. String
  2. 1. String 的构造方法
  3. 2. String 对象在内存中的情况
  4. 3. 空指针异常和空字符串
  5. 字符串比较
  6. 字符串查找
  7. 转化
  8. 字符串替换
  9. 字符串拆分
  10. 字符串截取(常用)
  11. 字符串的不可变性

更多推荐文章

查看全部
  • 贪心算法实战:三道经典 LeetCode 题解
  • 利用 AI 快速掌握 XP.1024 新版本特性
  • DeepSeek-R1-Distill-Llama-8B 本地部署与性能调优实战
  • 无需微调仅靠 Prompt 实现 LLM 持续学习新范式 CLOB 框架解析
  • 非科班背景字节后端面试经历与备战经验分享
  • STL 二分查找 lower_bound 与 upper_bound 详解
  • ibbot 智体机灵 AI 搜索智能体 ai_search_agent 上线及架构解析
  • Python AI 实战:从线性回归到 MNIST 图像分类
  • Whisper 模型本地化部署:版本下载与离线环境搭建
  • 奈飞工厂算法挑战赛指南
  • Vitis AI FPGA 部署实战:从模型量化到板端推理全流程
  • Android 大厂面试核心考点与问题汇总
  • Ubuntu 24.04 LTS 安装 NVIDIA 显卡驱动、CUDA 12.5 及 Docker 容器工具包
  • 开源万亿模型 Ring-2.5-1T 深度评测:架构解析与工程实践
  • LlamaFactory 多模态大模型微调实战指南
  • OpenCowork 评测:Windows 本地 AI 助手与飞书集成指南
  • OpenClaw Web Search 配置与渠道选择指南
  • LangChain 实战:工具调用与结构化输出指南
  • OpenClaw Web Search 工具配置与渠道详解
  • nanobot 轻量级 AI Agent 框架搭建 QQ 机器人实践与开源贡献

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online