上一篇
在Java中去除字符串中间的空格,可使用
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),适用于大多数场景,如需处理其他空白符(如制表符),可调整代码中的字符判断逻辑。
— 由技术团队原创,转载请注明出处。*


