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

2025年2月12日 | 阅读 6 分钟

非字母或数字字符称为特殊字符。我们应该删除字符串中的所有特殊字符,以便能够清晰流畅地读取字符串。特殊字符不可读,因此最好在阅读前将其删除。

使用 Java String.replaceAll() 方法

Java **replaceAll()** 方法的 **String** 类用替换来替换此字符串中与给定正则表达式匹配的每个子字符串。

语法

此方法接受 **两个** 参数

  • **regex:** 这是需要匹配的字符串的正则表达式。它可以是不同类型的。
  • **replacement:** 用于替换匹配项的字符串。

它返回 **结果字符串**。如果正则表达式语法无效,它将抛出 **PatternSyntaxException**。上述方法产生与表达式相同的结果

Java 程序删除特殊字符

在下面的示例中,removeAll() 方法会删除字符串中的所有特殊字符,并在其位置留一个空格。

RemoveSpecialCharacterExample1.java

输出

This   string   contains   special   characters  

示例

在下面的示例中,我们将所有特殊字符替换为空格。

RemoveSpecialCharacterExample2.java

输出

Hello Java   Programmer    !

使用用户定义的逻辑

在下面的示例中,我们定义了从字符串中删除特殊字符的逻辑。我们知道大写字母的 ASCII 值从 65 到 90 (A-Z),小写字母的 ASCII 值从 97 到 122 (a-z)。每个字符都与其对应的 ASCII 值进行比较。如果指定的两个条件都为真,则返回 true,否则返回 false。**for 循环** 一直执行到字符串的长度。当字符串达到其大小时,它将终止执行,我们就会得到结果字符串。

RemoveSpecialCharacterExample3.java

输出

String after removing special characters: ProgrammingLanguage

使用 Character.isLetter() 和 StringBuilder

在 Java 中,将 Character.isLetter() 与 StringBuilder 结合使用是一种从字符串中过滤掉非字母字符的有效方法。该方法利用 Character.isLetter() 识别字母的能力以及 StringBuilder 的可变性来动态构建清理后的字符串。

**步骤 1:** 创建一个 **String** 变量 **originalString**,并将其初始化为 "Hello@# World$%^&*()_+123!",同时创建一个 **StringBuilder** 对象 **cleanedString** 来存储结果字符串。

**步骤 2:** 使用 **toCharArray()** 将 **originalString** 转换为字符数组,并使用增强的 **for** 循环遍历字符数组中的每个字符。

**步骤 3:** 对于字符数组中的每个字符 **c**

  • 使用 **isLetter(c)** 检查 **c** 是否为字母。
  • 如果 **c** 是字母,则使用 **append(c)** 将其添加到 **cleanedString**。

**步骤 4:** 使用 **toString()** 将 **StringBuilder** 对象 **cleanedString** 转换为 **String** 并打印结果字符串。

让我们在 Java 程序中实现上述逻辑。

UsingCharater.java

输出

HelloWorld

不使用内置方法

在不允许使用内置方法的情况下,或者为了更深入地理解字符处理,我们可以通过直接比较 ASCII 值来手动过滤字符串中的字母字符。这种方法可以确保在字符验证过程的每个步骤都得到控制。

算法

**步骤 1:** 创建一个 **String** 变量 **originalString**,并将其初始化为 "Hello@# World$%^&*()_+123!",同时创建一个 **StringBuilder** 对象 **cleanedString** 来存储结果字符串。

**步骤 2:** 使用 **for** 循环通过索引遍历 **originalString** 中的每个字符。

**步骤 3:** 对于循环中当前索引处的每个字符

  • 使用 **char c = originalString.charAt(i)** 检索字符。
  • 通过比较其 ASCII 值来检查字符 **c** 是否为字母
    • 检查 **c** 是否为大写字母 (c >= 'A' && c <= 'Z')。
    • 检查 **c** 是否为小写字母 (c >= 'a' && c <= 'z')。
  • 如果 **c** 是字母,则将其附加到 **cleanedString**。

**步骤 4:** 使用 **toString()** 将 **StringBuilder** 对象 **cleanedString** 转换为 **String**。

WithoutBuiltin.java

输出

HelloWorld

在 Java 中使用 Regex

在 Java 中,正则表达式 (regex) 为字符串处理任务提供了强大的解决方案。之前,我们使用 replaceAll() 方法从字符串中删除特殊字符,这项任务也可以通过 regex 来实现。使用 regex,replaceAll() 方法利用 '^' 字符来选择除指定字符以外的所有字符,从而实现精确的删除或替换操作。

算法

**步骤 1:** 创建一个 **String** 变量 **originalString**,并将其初始化为 "Hello@# World$%^&*()_+123!"。

**步骤 2:** 使用 **String** 类的 **replaceAll** 方法将 **originalString** 中的所有非字母字符替换为空字符串。regex 模式 **[^a-zA-Z]** 用于匹配任何不是字母的字符。

**步骤 3:** 将 **replaceAll** 方法的结果存储在一个新的 **String** 变量 **cleanedString** 中,并打印 **cleanedString** 的值。

UsingRegex.java

输出

HelloWorld

下一个主题Java 教程