Java String replaceAll()

2025年03月24日 | 阅读 5 分钟

字符串操作是编程中的一个基本方面,Java 提供了丰富的工具来完成各种与字符串相关的任务。String 类提供的有用的方法之一是 replaceAll() 方法。在本节中,我们将深入探讨 Java 中的 replaceAll() 方法,探索其功能、常见用例和最佳实践。

Java String 类 replaceAll() 方法返回一个字符串,该字符串替换所有匹配正则表达式和替换字符串的字符序列。

签名

参数

regex : 正则表达式

replacement : 替换字符序列

返回值

替换后的字符串

异常抛出

PatternSyntaxException: 如果正则表达式的语法无效。

内部实现

Java String replaceAll() 示例:替换单个字符

让我们看一个替换所有 单个字符 出现次数的示例。

示例

编译并运行

输出

etpointeech is e very good website

Java String replaceAll() 示例:替换单词

让我们看一个替换所有 单个单词或一组单词 出现次数的示例。

示例

编译并运行

输出

My name was Khan. My name was Bob. My name was Sonoo.

Java String replaceAll() 示例:删除空格

让我们看一个删除所有 空格 出现次数的示例。

示例

编译并运行

输出

MynameisKhan.MynameisBob.MynameisSonoo.

Java String replaceAll() 方法示例 4

当正则表达式不正确时,replaceAll() 方法会抛出 PatternSyntaxException。请看以下示例。

示例

编译并运行

输出

For learning Java, TpointTech is a very good site.

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
	at java.base/java.util.regex.Pattern.error(Pattern.java:2015)
	at java.base/java.util.regex.Pattern.compile(Pattern.java:1784)
	at java.base/java.util.regex.Pattern.(Pattern.java:1427)
	at java.base/java.util.regex.Pattern.compile(Pattern.java:1068)
	at java.base/java.lang.String.replaceAll(String.java:2126)
	at ReplaceExample4.main(ReplaceExample4.java:12)

Java String replaceAll() 方法示例 5

replaceAll() 方法还可用于在字符之间插入空格。

示例

编译并运行

输出

TpointTech
 T p o i n t T e c h

Java String replaceAll() 方法示例 6

replaceAll() 方法甚至不接受 null 正则表达式,因为会引发 NullPointerException。

示例

编译并运行

输出

TpointTech

Exception in thread "main" java.lang.NullPointerException
	at java.base/java.util.regex.Pattern.(Pattern.java:1426)
	at java.base/java.util.regex.Pattern.compile(Pattern.java:1068)
	at java.base/java.lang.String.replaceAll(String.java:2126)
	at ReplaceAllExample6.main(ReplaceAllExample6.java:13)

使用正则表达式

replaceAll() 方法还支持正则表达式,从而可以进行更强大、更灵活的字符串替换。这是一个示例

在此示例中,我们将所有元音字母(a、e、i、o、u)替换为星号(*)。

处理特殊字符

由于正则表达式经常使用特殊字符,因此正确转义它们很重要。例如,如果要替换字符串中的字面点(“.”),则需要对其进行转义,因为在正则表达式中,点匹配任何字符。以下是如何操作

性能考虑

虽然 replaceAll() 提供了一种执行字符串替换的便捷方法,但重要的是要考虑其性能影响,尤其是在处理大型字符串或模式时。由于它在内部使用正则表达式,复杂或低效的正则表达式可能导致性能下降。

结论

Java 中的 replaceAll() 方法是字符串操作的强大工具,可让您轻松地在字符串中替换子字符串或模式。无论您需要执行简单的替换还是使用正则表达式进行复杂的转换,replaceAll() 都提供了一种通用的解决方案。通过了解其功能和最佳实践,您可以在 Java 应用程序中有效地利用它。

总之,掌握 replaceAll() 将使您能够高效优雅地操作字符串,从而增强 Java 程序的健壮性和功能。


Java String replaceAll 选择题

1. Java 中的 replaceAll() 方法做什么?

  1. 将字符串中某个字符的所有出现次数替换为另一个字符。
  2. 使用正则表达式将字符串中某个子字符串的所有出现次数替换为另一个子字符串。
  3. 替换字符串中的所有空格。
  4. 将整个字符串替换为另一个字符串。
 

答案:b)

解释: replaceAll() 方法使用指定的替换字符串替换字符串中与给定正则表达式匹配的每个子字符串。


2. 执行以下代码将产生什么结果?

  1. a) The price is 100 b) The price is $ c) The price is $ d) The price is $100
 

答案:d)

解释: replaceAll() 方法将字符串中的美元符号 ('$') 替换为转义的美元符号 ('$')。


3. 以下代码的输出是什么?

  1. apple and banana and cherry
  2. apple, banana, cherry
  3. apple andbanana andcherry
  4. apple and banana, cherry
 

答案:a)

解释: 正则表达式 \\s* 匹配一个逗号后跟零个或多个空格字符,并用 " and " 替换它们。


4. 如果正则表达式模式无效,replaceAll() 方法会抛出什么异常?

  1. IllegalArgumentException
  2. PatternSyntaxException
  3. NullPointerException
  4. IndexOutOfBoundsException
 

答案:b)

解释: 如果正则表达式模式的语法无效,replaceAll() 方法会抛出 PatternSyntaxException。


5. 下列代码的输出是什么?

  1. XXX-456-7890
  2. XXX-XXX-7890
  3. XXX-XXX-XXX
  4. 123-456-7890
 

答案:b)

解释: 正则表达式 \\d{3} 匹配任意三个数字,replaceAll() 方法将每个匹配项替换为 "XXX"。