Move all special char to the end of the String in Java

2025年3月29日 | 阅读 6 分钟

要在 Java 中将所有特殊字符添加到字符串的末尾,需要遍历输入字符串,识别字母数字字符,然后重新排列它们,使特殊字符位于末尾。Java 的内置字符分类方法可用于区分字母、数字和非字母数字字符,这对于此操作通常是必需的。结果应在不改变其相对顺序的情况下移走特殊字符,同时保留字母数字字符的顺序。

示例 1

输入

String str = "Hello!@#World123$%"

输出

结果字符串为 HelloWorld123!@#$%

解释

特殊字符 (!@#$%) 被移至末尾,保持其原始顺序,而所有字母数字字符 (HelloWorld123) 则移至开头。

示例 2

输入

String str = "2024Year!!!New#Goals"

输出

结果字符串为 2024YearNewGoals!!!#

解释

以相同的排列方式,特殊字符 (!!!#) 被移至末尾,字母数字字符 (2024YearNewGoals) 被置于开头。

示例 3

输入

String str = "Java$Is#Fun*&"

输出

结果字符串为 JavaIsFun$#*&

解释

在特殊字符 ($#*&) 之后,它们保持与之前相同的顺序,是字母数字字符 (JavaIsFun)。

朴素方法

目标是遍历输入字符串并保留两个 字符串:一个包含常规字符(a, A, 1, '', 等),另一个包含特殊字符(@, $, 等)。最后连接这两个字符串并返回。

算法

步骤 1: 初始化字符串 s。

步骤 2: 设置两个空的返回字符串,result1 用于字母数字字符,result2 用于特殊字符。

步骤 3:循环 中遍历字符串 s 中的每个字符。

步骤 4: 验证 ch 是否对应于正则表达式 [a-zA-Z0-9\\s+]。

步骤 4.1: 如果是,则将 ch 添加到 result1。

步骤 4.2: 如果否,则将 ch 添加到 result2。

步骤 5: 返回 result 1(字母数字字符)和 result 2(特殊字符)的组合。

步骤 6: 调用带有输入字符串的 函数 后,打印更新后的结果。

实施

文件名: CharactersTraversing.java

输出

 
The resulted string is given by 2024YearNewGoals!!!#   

复杂度分析

上述代码的时间复杂度为 O(N),空间复杂度为 O(N),其中“N”表示字符串的长度。

方法:使用指针

该方法提供了一个 Java 程序,该程序给定一个字符串,将特殊字符与字母数字字符和空格分开,并将特殊字符添加到末尾。moveCharToEnd 方法通过遍历输入字符串 str 中的每个字符来检查每个字符是否是空格或字母数字字符。如果是,则将其添加到 red 字符串。如果不是,则将其附加到 Char 字符串,该字符串用于存储特殊字符。该方法在循环结束后连接 res 和 Char 字符串并返回结果。

算法

步骤 1: 创建两个空字符串,char 用于特殊字符,res 用于字母数字字符和空格。

步骤 2: 遍历输入字符串 str 中的每个字符。

步骤 3: 确定索引 I 处的每个字符是空格还是字母数字字符(在 A, A, 0-9 之间)。

步骤 4: 如果字符是空格或字母数字字符,则将其添加到 res。

步骤 5: 如果不是,则将该字符(表示它是唯一字符)附加到 char。

步骤 6: 循环结束后,连接 res(包含字母数字字符和空格)与 char(包含特殊字符)。

步骤 7: 返回连接后的字符串。它以所有字母数字字符开头,以特殊字符结尾。

步骤 8: 打印返回的结果。当特殊字符添加到末尾时,原始字符串中的空格和字母数字字符的顺序将得以保留。

实施

文件名: PointersCharacterTravaersing.java

输出

 
The resulted string is given by 2024YearNewGoals!!!#   

复杂度分析

上述代码的时间复杂度为 O(N),其中 N 表示输入字符串的长度,空间复杂度为 O(N)。

方法:使用 'isalnum()' 方法

下面的方法提供了一个 ,名为 isalnumMethod,它有一个 moveAllSpecialChars 方法,该方法将输入字符串中的特殊字符与常规字符(字母、数字和空格)分开。使用 character.isLetterOrDigit() 和 Character.isWhitespace() 来确定哪些字符是常规字符,该过程遍历字符串中的每个字符。常规字符被附加到 normalCh 字符串,而 specialCh 字符串则存储特殊字符。最终,通过连接这两个字符串,所有特殊字符都被移至字符串的末尾。

算法

步骤 1: 从一个名为“special_ch”的空字符串开始,用于存储特殊字符,并从一个名为“normal_ch”的空字符串开始,用于存储常规字符。

步骤 2: 逐个遍历输入字符串中的每个“ch”字符。

步骤 3: 对提供的字符串中的每个字符应遵循以下步骤。

步骤 3.1: 使用 isalnum() 函数确定 ch 是否是字母数字字符、空格或空白字符。或者,使用 isspace() 方法。

步骤 3.2: 如果 ch 是空格或字母数字字符,则将其添加到 normal_chars 字符串。

步骤 3.3: 如果 ch 是唯一字符,则将其添加到 special_chars 字符串。

步骤 4: 遍历字符串中的每个字符后,返回 normal_ch 和 special_ch 的串联。

实施

文件名: IsalnumMethod.java

输出

 
The resulted string is given by 2024YearNewGoals!!!#   

复杂度分析

上述代码的时间复杂度为 O(N),其中 n 表示输入字符串的长度,空间复杂度为 O(N)。