Java中字符串替换的实用方法:提取点号后内容

阿磊吖_1716

阿磊吖_1716

2026-03-07

822人浏览

原创

Java中字符串替换的实用方法:提取点号后内容

本文介绍在Java中高效提取字符串中点号(.)之后部分的多种方法,包括indexOf+substring和正则表达式replaceAll,兼顾性能、可读性与边界场景处理。

本文介绍在java中高效提取字符串中点号(.)之后部分的多种方法,包括`indexof`+`substring`和正则表达式`replaceall`,兼顾性能、可读性与边界场景处理。

在Java开发中,常见需求是“截取字符串中第一个点号(.)之后的内容”,例如将 "ABC.eee" 转换为 "eee",而对不含点号的字符串(如 "hello")保持原样。该操作本质是条件性字符串替换/截取,而非简单全局替换。以下是两种主流、可靠且生产可用的实现方式:

✅ 方法一:indexOf + substring(推荐 —— 高效、清晰、无正则开销)

该方案利用 String.indexOf('.') 快速定位首个点号索引,仅当点号存在时执行子串截取,时间复杂度为 O(n),无正则引擎解析开销,适合高频调用或性能敏感场景。

public static String extractAfterDot(String str) {
    if (str == null) return null;
    int idx = str.indexOf('.');
    return idx != -1 ? str.substring(idx + 1) : str;
}

// 使用示例
System.out.println(extractAfterDot("ABC.eee")); // 输出: "eee"
System.out.println(extractAfterDot("no.dot.here")); // 输出: "dot.here"(注意:仅截取首个点号后)
System.out.println(extractAfterDot("hello"));     // 输出: "hello"
System.out.println(extractAfterDot(""));         // 输出: ""
System.out.println(extractAfterDot(null));       // 输出: null(已做空值防护)

⚠️ 注意事项:

  • substring(idx + 1) 中 idx + 1 可能越界(如 "a."),但 String.substring(int) 在 beginIndex == length() 时返回空字符串 "",不会抛异常,行为安全;
  • 务必提前判空(null 检查),否则 indexOf() 会触发 NullPointerException。

✅ 方法二:正则表达式 replaceAll(简洁但需谨慎)

使用 str.replaceAll("^[^.]*.", "") 可一行实现:匹配字符串开头至首个点号(含)并替换为空。其中:

Java注释规范Skills
Java注释规范Skills

当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。

下载
  • ^ 表示行首;
  • [^.]* 匹配零个或多个非点字符;
  • \. 匹配字面量点号(需转义);
  • 整体模式仅影响前缀,不影响后续内容。
String result = str == null ? null : str.replaceAll("^[^.]*\.", "");

⚠️ 注意事项:

  • 正则方式隐式依赖字符串非空,null 直接调用会 NPE,必须前置校验;
  • 性能略低于 indexOf 方案(尤其短字符串),因涉及正则编译与匹配;
  • 该正则仅移除首个点号前的部分,符合题意;若需移除所有点号前内容(如 "A.B.C" → "C"),应改用 str.substring(str.lastIndexOf('.') + 1)。

? 补充:更健壮的工具方法(推荐封装复用)

为提升代码健壮性与复用性,建议封装为静态工具方法,并支持空安全与可选策略:

public class StringUtils {
    public static String afterFirstDot(String str) {
        if (str == null || str.isEmpty()) return str;
        int idx = str.indexOf('.');
        return idx == -1 ? str : str.substring(idx + 1);
    }

    // 若需支持“无点号时返回空字符串”等定制逻辑,可扩展参数
    public static String afterFirstDotOrEmpty(String str) {
        return str == null ? "" : afterFirstDot(str);
    }
}

✅ 总结

方案 优势 适用场景
indexOf + substring 零依赖、高性能、语义清晰、易调试 大多数场景,尤其是性能关键路径
replaceAll 正则 代码极简,适合一次性脚本或配置化场景 简单逻辑、低频调用、追求代码紧凑

无论选择哪种方式,请始终遵循:先校验 null/empty,再处理业务逻辑。正确理解 String 不可变性(所有操作均返回新字符串)也是避免常见 bug 的关键。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11657

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8762

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7532

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1244

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

1008

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1496

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

3049

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20311

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1335

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习