Java删除或替换部分字符串_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java删除或替换部分字符串

Java删除或替换部分字符串

更新时间:2022-08-11 11:34:21 来源:极悦 浏览2455次

在本Java教程中,极悦小编将带着大家一起研究可以在 Java中删除或替换部分字符串的各种方法。

我们将探索使用 String API 删除和/或替换子字符串,然后使用 StringBuilder API,最后使用 Apache Commons 库的 StringUtils类。

字符串API

替换子字符串的最简单直接的方法之一是使用 String 类的 replace 、replaceAll 或 replaceFirst 。

replace()方法有 两个参数——目标和替换文本:

String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";
String processed = master.replace(target, replacement);
assertTrue(processed.contains(replacement));
assertFalse(processed.contains(target));

上面的代码片段将产生这个输出:

Hello World Java!

如果在选择目标时需要正则表达式,那么 replaceAll()或 replaceFirst()应该是选择的方法。顾名思义, replaceAll() 将替换每个匹配的匹配项,而 replaceFirst()将替换第一个匹配的匹配项:

String master2 = "Welcome to Baeldung, Hello World Baeldung";
String regexTarget = "(Baeldung)$";
String processed2 = master2.replaceAll(regexTarget, replacement);
assertTrue(processed2.endsWith("Java"));

processes2的值将是:

Welcome to Baeldung, Hello World Java

这是因为作为 regexTarget提供的正则表达式只会匹配最后一次出现的 Baeldung。 在上面给出的所有示例中,我们可以使用空替换,它会有效地从master中删除一个目标。

StringBuilder API 

我们还可以使用 StringBuilder类在 Java 中操作文本。 这里的两个方法是 delete()和 replace()。

我们可以从现有的String构造 StringBuilder 的实例,然后使用上述方法根据需要执行String操作:

String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";
int startIndex = master.indexOf(target);
int stopIndex = startIndex + target.length();
StringBuilder builder = new StringBuilder(master);

现在我们可以 使用 delete() 删除目标:

builder.delete(startIndex, stopIndex);
assertFalse(builder.toString().contains(target));

我们也可以使用 replace()来更新 master:

builder.replace(startIndex, stopIndex, replacement);
assertTrue(builder.toString().contains(replacement));

使用StringBuilder 和 String API的一个明显区别 是我们必须自己获取 目标 String的开始和结束索引。

StringUtils类

我们将考虑的另一种方法是 Apache Commons 库。

首先,让我们将所需的依赖项添加到我们的项目中:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

可以在此处找到该库的最新版本。

StringUtils 类具有替换String的子字符串的方法:

String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";
String processed = StringUtils.replace(master, target, replacement);
assertTrue(processed.contains(replacement));

eplace()有一个重载变体,它接受一个整数 max参数,该参数确定要替换的出现次数。如果不区分大小写,我们也可以使用replaceIgnoreCase():

String master2 = "Hello World Baeldung!";
String target2 = "baeldung";
String processed2 = StringUtils.replaceIgnoreCase(master2, target2, replacement);
assertFalse(processed2.contains(target));

替换确切的词

在最后一个示例中,我们将学习如何替换String中的确切单词。

执行此替换的直接方法是使用带有单词边界的正则表达式。

单词边界正则表达式是\b。在这个正则表达式中包含所需的单词只会匹配精确的出现。

首先,让我们看看如何在 String API 中使用这个正则表达式:

String sentence = "A car is not the same as a carriage, and some planes can carry cars inside them!";
String regexTarget = "\\bcar\\b";
String exactWordReplaced = sentence.replaceAll(regexTarget, "truck");

exactWordReplaced字符串包含:

"A truck is not the same as a carriage, and some planes can carry cars inside them!"

只有确切的词将被替换。请注意,在 Java 中使用正则表达式时,总是需要对反斜杠进行转义。

另一种替换方法是使用 Apache Commons Library 中的RegExUtils类,正如我们在上一节中看到的那样,它可以作为依赖项添加:

String regexTarget = "\\bcar\\b";
String exactWordReplaced = RegExUtils.replaceAll(sentence, regexTarget, "truck");

虽然这两种方法都会产生相同的结果,但决定使用哪一种将取决于我们的具体情况。如果大家想了解更多相关知识,可以关注一下极悦的Java视频教程,里面的课程内容细致全面,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>