更新时间:2022-08-11 11:34:21 来源:极悦 浏览2455次
在本Java教程中,极悦小编将带着大家一起研究可以在 Java中删除或替换部分字符串的各种方法。
我们将探索使用 String API 删除和/或替换子字符串,然后使用 StringBuilder API,最后使用 Apache Commons 库的 StringUtils类。
替换子字符串的最简单直接的方法之一是使用 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类在 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的开始和结束索引。
我们将考虑的另一种方法是 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视频教程,里面的课程内容细致全面,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习