如何在 Java 中从字符串中删除子字符串?

2024 年 10 月 23 日 | 阅读 9 分钟

在 Java 中,从字符串中删除子字符串涉及对原始字符串进行操作,以排除指定的子字符串。此过程可以通过多种方式实现,通常涉及字符串处理方法,这些方法可以识别子字符串的位置,然后创建一个不包含不需要的部分的新字符串。基本概念围绕着利用 Java 强大的 String API 来有效定位和消除子字符串,同时保持原始字符串其余部分的完整性。Java 提供了几种从字符串中删除子字符串的方法。

场景

以下是您可能需要在 Java 中从字符串中删除子字符串的一些场景

清理用户输入

场景:一个 Web 应用程序收集用户输入,但有些用户会包含不需要的短语或字符(例如,“请删除此内容”或 HTML 标签,如 <script>)。

示例:删除特定短语或字符集的所有实例,以净化输入。

格式化数据

场景:一个程序处理数据文件,这些文件在每个条目中包含不必要的标题或页脚(例如,“报告开始”或“报告结束”)。

示例:删除这些标题和页脚,以便在进一步处理之前标准化数据格式。

删除敏感信息

场景:应用程序记录的错误消息无意中包含密码或 API 密钥等敏感信息。

示例:在保存或显示日志条目之前删除这些敏感子字符串。

简化 URL

场景:一个网页抓取器收集包含跟踪参数的 URL(例如,“?utm_source=newsletter”)。

示例:剥离这些参数以获得基础 URL,以便更清晰地存储和分析。

文本规范化

场景:应用程序处理包含重复样板短语的文本文档(例如,电子邮件末尾的“此致敬礼”)。

示例:删除这些短语以标准化文本,以便更好地阅读或分析。

自定义输出

场景:一个模板引擎生成动态内容,但某些占位符或标签(例如,“{{username}}”)需要在最终输出中删除。

示例:剥离这些占位符以干净地呈现最终文档。

所有这些场景都涉及需要识别和删除大字符串中的特定子字符串以达到预期结果,从而确保剩余文本干净、准确并为预期用途做好准备。

1) 使用 replace() 方法

String 类的 replace() 方法被重载,提供了该方法的两种不同实现,并提供了一种从字符串中删除子字符串的直接方法。通过将不需要的子字符串替换为空字符串,我们有效地将其从原始字符串中删除。

此方法既直观又方便,使其成为简单字符串操作的热门选择。它可以处理子字符串的所有出现,确保指定的部分在字符串中出现的所有地方都被完全删除。

在第一种方法中,将一个新字符添加到字符串中,以替换所有先前的字符。

此方法在所有旧字符都已更新后返回带有新字符的字符串。

语法

如果字符串中找不到新字符,则该过程返回此字符串。

文件名:RemoveSubString.java

输出

JavatPoint is for teaching purpose

2) 使用 CharSequence

第二种技术使用 CharSequence 替换所需的字符串,而 CharSequence 只是字符的集合。CharSequence 是一个表示字符序列的接口。

它由 String、StringBuilder 和 StringBuffer 等多个类实现。要从字符串中删除特定的子字符串,您可以使用 replace 方法,该方法接受两个 CharSequence 参数。通过将我们要删除的子字符串作为第一个参数,并将空字符串作为第二个参数传递,您可以有效地从原始字符串中删除指定的子字符串。此方法利用 CharSequence 的灵活性和强大功能来统一处理各种字符序列。

语法

此操作与第一种操作仅有的区别在于它替换了字符组成的字符串。

文件名:RemoveSubstringExample.java

输出

Hello, this is a string.

3) 将子字符串替换为空字符串

用空字符串替换子字符串是删除该子字符串的常用技术。通过使用 replace() 方法,并将我们要删除的子字符串作为第一个参数,将空字符串 ("") 作为第二个参数,我们有效地消除了指定的子字符串。

这种方法很简单,并且利用了 Java String 类提供的强大的字符串操作功能。结果是一个新的字符串,其中删除了指定子字符串的所有实例,而原始字符串的其余部分保持不变。Java 允许我们轻松地用空字符串替换要从 String 中删除的子字符串。

语法

文件名:RemoveSubStringFromString.java

输出

How to Remove substring from String in Java

4) 使用 String 的 replaceFirst() 方法

String 类提供的 replaceFirst() 方法允许我们删除字符串中特定子字符串的第一个匹配项。它接受两个参数:我们要替换的子字符串和替换字符串。通过将空字符串 ("") 作为替换字符串,我们有效地从原始字符串中删除了指定子字符串的第一个匹配项。

当只想删除子字符串的第一个匹配项而保留后续匹配项不变时,此方法很有用。replaceFirst() 方法提供了一种方便有效的 Java 字符串操作方法。

此方法搜索与正则表达式匹配的字符串,如果找到,则将其替换为给定的字符串。

在后台,此函数通过使用 Pattern 类的 **compile()** 和 **matcher()** 方法,使用正则表达式提取文本。

语法

将创建一个正则表达式来从字符串中提取一个数字并将其替换为另一个数字字符串。

注意:此数字只会更改字符串的前两位数字;其余数字将保持不变。

文件名:RemoveSubStringFromString.java

输出

How to Remove substring from String in Java

5) 使用 replaceAll() 方法

**replaceAll()** 方法与 **replaceFirst()** 不同,它使用正则表达式来替换字符串中的所有实例。

String 类提供的 replaceAll() 方法允许我们将字符串或模式中的特定子字符串或模式的所有匹配项替换为另一个子字符串或模式。它接受两个参数:表示我们要替换的子字符串或模式的正则表达式,以及替换字符串或模式。

使用 replaceAll() 时,我们定义一个匹配您要替换的子字符串或模式的正则表达式。通过将此模式作为第一个参数,将替换字符串或模式作为第二个参数,我们可以有效地将指定子字符串或模式的所有匹配项替换为替换值。

它可用于在字符串中执行全局替换,例如删除特定子字符串的所有实例、替换特定模式或基于模式匹配转换文本。它提供了一种灵活而强大的 Java 字符串操作方法,尤其是在处理涉及模式的复杂替换场景时。

与 **replaceFirst()** 类似,此方法通过使用 **compile()** 和 **matcher()** 方法使用正则表达式提取字符串。如果正则表达式不正确,它还会生成 **PatternSyntaxException**。

语法

文件名:RemoveSubStringFromString.java

输出

How to Remove substring from String in Java

6) 使用 StringBuilder 的 delete() 方法

StringBuilder 类提供了一个可变的字符序列,使我们能够高效地操作字符串。StringBuilder 的 delete() 方法使我们能够从序列中删除一系列字符。

为了向字符串添加和删除字符,**StringBuilder** 包含一个可修改的字符序列。

empty **StringBuilder** 函数 **Object() { [native code] }** 创建一个初始容量为 16 个字符的字符串构建器,如果内部缓冲区溢出,则会自动创建更大的字符串构建器。

delete() 方法接受两个参数:要删除的字符的起始索引(含)和结束索引(不含)。调用 delete() 后,指定范围内的字符将从 StringBuilder 中删除,其余字符将向左移动以填补空白。

**delete()** 函数的第一个和第二个 int 参数指定了要从字符串中删除的子字符串的开始和结束。

最后一个索引是不包含的,因为它从第二个参数中减去一,但开始索引是包含的。

当我们需要删除 StringBuilder 中存储的字符串的特定部分时,此方法很有用,例如修剪不需要的字符、删除子字符串或执行其他类型的字符删除操作。它提供了一种方便高效的方法来修改字符串数据,而无需创建新的字符串对象,这对于性能敏感的任务可能很有益。

语法

我们将使用一个正则表达式,该正则表达式提取字符串中的所有数字并替换所有匹配项的数字。

**\d:**此正则表达式识别 0 到 9 之间的任何数字。

文件名:RemoveSubStringExample.java

输出

How to Remove substring from String in Java

7) 使用 StringBuilder replace() 方法

**replace()** 函数与 **delete()** 方法的唯一区别在于用于替换已从字符串中删除的字符的第三个参数。

StringBuilder 类提供可变字符串,允许高效地操作字符序列。replace() 方法使您能够将 StringBuilder 中的特定字符范围替换为另一个字符串。

replace() 方法接受三个参数:要替换的子字符串的起始索引(含)、要替换的子字符串的结束索引(不含)以及替换字符串。调用 replace() 后,指定范围内的字符将被替换字符串的字符替换。

如果需要替换一个大字符串,其大小将增加以适应字符串的长度。

当我们需要修改 StringBuilder 中存储的字符串的某些部分时,此方法很有用,例如替换子字符串、更新特定片段或执行其他类型的字符替换操作。它提供了一种灵活高效的方法来就地修改字符串数据,而无需创建新的字符串对象,这对于性能关键型应用程序可能是有益的。

语法

在此方法返回 StringBuilder 后,可以使用 **toString() { [native code] }()** 函数打印更新后的字符串。

文件名:RemoveSubStringFromString.java

输出

How to Remove substring from String in Java

结论

在本节中,我们学习了如何替换和删除字符以从字符串中删除子字符串。所介绍的技术包括使用 StringBuilder 的 delete() 和 replace() 方法,以及字符串的 replace()、replaceFirst() 和 replaceAll() 函数。