replaceAll("\s+", "")
方法,该方法通过正则表达式匹配连续空白字符并替换为空字符串,但会同时移除首尾空格,若需保留首尾空格,需先记录首尾空白,处理中间后再拼接。在Java中去除字符串中间的空格,同时保留开头和结尾的空格,可以通过以下方法实现,本方法将字符串分为三部分处理:开头的连续空格、中间内容(去除空格)、结尾的连续空格,确保高效且符合需求。
核心思路
- 定位开头和结尾的空格
遍历字符串开头和结尾,记录连续空格的数量。 - 提取中间内容
获取去除开头和结尾空格后的中间子字符串。 - 去除中间空格
遍历中间部分,跳过空格字符,保留其他字符。 - 拼接结果
将开头空格、处理后的中间内容和结尾空格拼接成最终结果。
完整代码实现
public class StringUtils { public static String removeMiddleSpaces(String str) { if (str == null || str.isEmpty()) { return str; } int len = str.length(); // 1. 计算开头连续空格的数量 int prefixSpaces = 0; for (int i = 0; i < len; i++) { if (str.charAt(i) == ' ') { prefixSpaces++; } else { break; } } // 2. 计算结尾连续空格的数量 int suffixSpaces = 0; for (int i = len - 1; i >= prefixSpaces; i--) { if (str.charAt(i) == ' ') { suffixSpaces++; } else { break; } } // 3. 提取中间部分(不含开头和结尾空格) int middleStart = prefixSpaces; int middleEnd = len - suffixSpaces; String middle = str.substring(middleStart, middleEnd); // 4. 去除中间部分的所有空格 StringBuilder sb = new StringBuilder(); for (int i = 0; i < middle.length(); i++) { char c = middle.charAt(i); if (c != ' ') { sb.append(c); } } String middleWithoutSpaces = sb.toString(); // 5. 拼接最终结果 return str.substring(0, prefixSpaces) + middleWithoutSpaces + str.substring(middleEnd); } }
使用示例
public class Main { public static void main(String[] args) { String input1 = " Hello World "; String output1 = StringUtils.removeMiddleSpaces(input1); System.out.println("结果: "" + output1 + """); // 输出: " HelloWorld " String input2 = " t Java is great! t "; String output2 = StringUtils.removeMiddleSpaces(input2); System.out.println("结果: "" + output2 + """); // 输出: " tJavaisgreat!t " } }
关键点说明
- 保留两端空格:通过
prefixSpaces
和suffixSpaces
记录开头/结尾的空格数量,确保不被修改。 - 仅去除中间空格:遍历中间部分时,仅跳过空格字符(),保留制表符(
t
)等其他字符。 - 高效处理:使用
StringBuilder
拼接非空格字符,避免频繁创建字符串对象。 - 特殊场景:若字符串全为空格,直接返回原字符串。
适用场景
- 清理用户输入中的多余空格(如表单数据)。
- 格式化文本输出(保留缩进,去除内容间空格)。
- 处理日志文件(保留对齐空格,压缩内容)。
本方法时间复杂度为 O(n)(n为字符串长度),空间复杂度 O(n),适用于大多数场景,如需处理其他空白符(如制表符),可调整代码中的字符判断逻辑。
— 由技术团队原创,转载请注明出处。*
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/24356.html