复制代码格式化
从 GitHub 或技术博客复制一段 Python 代码贴到 IDE 前,发现每行前面都带着行号和多余的空格。手动删 200 行代码的行号至少花 3 分钟,还容易误删缩进。用本工具选「首尾空格」+「去空行」,一次粘贴,代码直接恢复原格式,缩进和空行结构完整保留,省下校对时间。
单独可选
一段文字里混进多余的空格,可能是从网页复制粘贴时留下的,也可能是手打时多按了空格。这个工具能一键清除首尾空格、合并多个连续空格、删除空行,或者三者全做。适合写代码前清理文本、整理文档段落、清洗 CSV 数据——所有操作都在浏览器本地执行,内容不会上传到服务器。
从 GitHub 或技术博客复制一段 Python 代码贴到 IDE 前,发现每行前面都带着行号和多余的空格。手动删 200 行代码的行号至少花 3 分钟,还容易误删缩进。用本工具选「首尾空格」+「去空行」,一次粘贴,代码直接恢复原格式,缩进和空行结构完整保留,省下校对时间。
销售从 CRM 导出 5000 条客户名单,邮箱字段里有的前面多了空格、有的结尾多了空格。直接用 Excel 去重功能会认为 'zhang@abc.com' 和 ' zhang@abc.com' 是两个人,导致重复导入。用本工具对邮箱列执行「首尾空格」清理,去重准确率从 70% 提升到 100%,避免后续发营销邮件被退回。
在 Notion 里写好一份包含 30 行数据的 Markdown 表格,导出后复制到公众号编辑器,发现单元格内多余空格导致表格列宽错乱、文字换行。用本工具选「多空格合并为单空格」+「去空行」,表格内所有字段对齐,无需在编辑器里逐行调整,直接发布。
从知网批量下载 50 篇参考文献的摘要,粘贴到 Word 后发现每段首尾都有多余空格、段落之间夹着空行。手动清理 50 篇至少 10 分钟,且容易漏删。用本工具选「首尾空格」+「去空行」,一次处理所有段落,格式统一,直接粘贴进论文参考文献部分。
后端排查线上问题,从服务器拉取 2 万行 Nginx 访问日志,文件里每行前后有多余空格、中间夹杂着空行。直接 grep 搜索 IP 地址会漏掉带空格的记录。先用本工具「首尾空格」+「去空行」清洗,再 grep 得到精确匹配结果,排查时间从 15 分钟缩短到 2 分钟。
| 维度 | 本工具 | 在线处理站 | 手工/文本编辑器 |
|---|---|---|---|
| 隐私 | 纯浏览器处理,文本不上传服务器 | 需上传文本至对方服务器 | 本地操作,无网络传输 |
| 速度 | 即时处理,无网络延迟 | 受上传速度和服务器响应影响 | 取决于人工操作速度 |
| 离线可用 | 支持,处理逻辑在浏览器内执行 | 不支持,需联网访问 | 支持,完全本地 |
| 批量处理 | 一次处理整段文本,支持多行 | 多数需逐段粘贴处理 | 需手动逐行删除或替换 |
| 大小限制 | 无限制,仅受浏览器内存影响 | 常有字数/文件大小限制 | 无限制,取决于编辑器 |
| 注册/收费 | 免费,无需注册 | 部分功能需注册或付费 | 免费,使用已有编辑器 |
| 多空格合并 | 一键合并连续空格为单个 | 部分工具不支持或需额外步骤 | 需手动查找替换或写正则 |
| 输入 | 输出 | 说明 |
|---|---|---|
| Hello World | Hello World | 常规:首尾空格去掉,中间多个空格合并为一个,验证基本功能 |
| 边界:全空格输入,输出应为空字符串,验证空值处理 | ||
| a b c | a b c | 常规:制表符和换行符被当作空格处理,合并为单个空格 |
| 边界:混合空白字符(空格、换行、制表符),全部去除后为空 | ||
| Hello World Test | Hello World Test | 易错:用户可能以为去空行会保留换行,但本工具默认合并所有空白,包括换行 |
| a b c | a b c | 常规:首尾空格去除,中间多个空格合并为一个,验证一致性 |
| 边界:空字符串输入,输出应为空,验证极端情况 | ||
| 单 词 间 有 多 个 空 格 | 单 词 间 有 多 个 空 格 | 易错:中文文本中间的多空格被合并为单个空格,用户可能误以为中文空格不会被处理 |
1.混淆「全部空格」与「首尾空格」的预期效果
输入「 a b c 」,选择「首尾空格」后希望得到「abc」选择「全部空格」或先手动删除中间空格再使用「首尾空格」「首尾空格」只删除字符串开头和结尾的空格,中间的空格保留。这是按 trim 语义设计,非全清空。
2.把「多空格合并」当作「去空行」使用
输入「a b\n\nc」,选择「多空格合并」后希望得到「a\nc」先使用「去空行」删除空行,再用「多空格合并」压缩行内空格「多空格合并」只处理行内连续空格(替换为单个空格),不处理换行符。空行是空白行,需单独用「去空行」功能。
3.全角空格未被识别为空格
输入「 a b 」(全角空格),选择「全部空格」后结果仍是「 a b 」先手动将全角空格替换为半角空格,或使用支持全角空格处理的版本本工具默认只处理 ASCII 半角空格(U+0020)。全角空格(U+3000)是不同字符,需单独替换。
4.误以为「去空行」会删除缩进空格
输入「 a\n b」,选择「去空行」后希望得到「ab」先使用「首尾空格」或「全部空格」删除行首空格,再使用「去空行」「去空行」只删除完全空白的行(仅含换行符),不删除行首的缩进空格。缩进空格需用空格处理功能。
5.连续使用「全部空格」后丢失换行结构
输入「a b\nc d」,选择「全部空格」后得到「abcd」,丢失了分行意图若需保留换行,先使用「多空格合并」压缩行内空格,再手动处理换行「全部空格」会删除所有空格字符(含换行符?不,换行符不是空格字符)。但若用户期望保留换行,应避免使用「全部空格」覆盖整个文本。
6.把制表符当作空格处理
输入「a\tb」,选择「全部空格」后结果仍是「a\tb」先使用替换功能将制表符替换为空格,再使用本工具制表符(U+0009)是控制字符,不是空格。本工具只处理空格字符(U+0020),不处理制表符。
trimmed = replace(replace(input, '^[\s]+|[\s]+$', ''), '[\s]{2,}', ' ')
input原始输入文本字符串trimmed处理后的输出文本输入文本为 ' 你好 世界 '(开头2空格,中间4空格,结尾2空格):先通过正则 ^[\s]+|[\s]+$ 去除首尾空格得到 '你好 世界',再通过 [\s]{2,} 将中间连续4空格替换为1空格,最终结果为 '你好 世界'。
6 种主流语言实现,复制即用:
import re
text = " Hello world! This has extra spaces. "
# 去除首尾空格
stripped = text.strip()
# 合并多个连续空格为单个空格
single_spaced = re.sub(r' +', ' ', stripped)
# 去除所有空格(包括中间)
no_spaces = re.sub(r'\s+', '', text)
# 去除空行(保留非空行)
lines = "Line1\n\nLine2\n\n\nLine3"
non_empty_lines = '\n'.join(line for line in lines.split('\n') if line.strip())
print(f"原始: '{text}'")
print(f"首尾去空格: '{stripped}'")
print(f"多空格合并: '{single_spaced}'")
print(f"全部去空格: '{no_spaces}'")
print(f"去空行: '{non_empty_lines}'")
# 输出:
# 原始: ' Hello world! This has extra spaces. '
# 首尾去空格: 'Hello world! This has extra spaces.'
# 多空格合并: 'Hello world! This has extra spaces.'
# 全部去空格: 'Helloworld!Thishasextraspaces.'
# 去空行: 'Line1\nLine2\nLine3'const text = ' Hello world! This has extra spaces. ';
// 去除首尾空格
const stripped = text.trim();
// 合并多个连续空格为单个空格
const singleSpaced = stripped.replace(/ +/g, ' ');
// 去除所有空格(包括中间)
const noSpaces = text.replace(/\s+/g, '');
// 去除空行(保留非空行)
const lines = 'Line1\n\nLine2\n\n\nLine3';
const nonEmptyLines = lines.split('\n').filter(line => line.trim() !== '').join('\n');
console.log(`原始: '${text}'`);
console.log(`首尾去空格: '${stripped}'`);
console.log(`多空格合并: '${singleSpaced}'`);
console.log(`全部去空格: '${noSpaces}'`);
console.log(`去空行: '${nonEmptyLines}'`);
// 输出:
// 原始: ' Hello world! This has extra spaces. '
// 首尾去空格: 'Hello world! This has extra spaces.'
// 多空格合并: 'Hello world! This has extra spaces.'
// 全部去空格: 'Helloworld!Thishasextraspaces.'
// 去空行: 'Line1\nLine2\nLine3'package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
text := " Hello world! This has extra spaces. "
// 去除首尾空格
stripped := strings.TrimSpace(text)
// 合并多个连续空格为单个空格
re := regexp.MustCompile(` +`)
singleSpaced := re.ReplaceAllString(stripped, " ")
// 去除所有空格(包括中间)
noSpaces := re.ReplaceAllString(text, "")
// 去除空行(保留非空行)
lines := "Line1\n\nLine2\n\n\nLine3"
var nonEmptyLines []string
for _, line := range strings.Split(lines, "\n") {
if strings.TrimSpace(line) != "" {
nonEmptyLines = append(nonEmptyLines, line)
}
}
fmt.Printf("原始: '%s'\n", text)
fmt.Printf("首尾去空格: '%s'\n", stripped)
fmt.Printf("多空格合并: '%s'\n", singleSpaced)
fmt.Printf("全部去空格: '%s'\n", noSpaces)
fmt.Printf("去空行: '%s'\n", strings.Join(nonEmptyLines, "\n"))
// 输出:
// 原始: ' Hello world! This has extra spaces. '
// 首尾去空格: 'Hello world! This has extra spaces.'
// 多空格合并: 'Hello world! This has extra spaces.'
// 全部去空格: 'Helloworld!Thishasextraspaces.'
// 去空行: 'Line1\nLine2\nLine3'
}#!/bin/bash
text=" Hello world! This has extra spaces. "
# 去除首尾空格
stripped="$(echo -e "$text" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
# 合并多个连续空格为单个空格
single_spaced="$(echo -e "$stripped" | tr -s ' ')"
# 去除所有空格(包括中间)
no_spaces="$(echo -e "$text" | tr -d '[:space:]')"
# 去除空行(保留非空行)
lines="Line1
Line2
Line3"
non_empty_lines="$(echo -e "$lines" | grep -v '^[[:space:]]*$')"
echo "原始: '$text'"
echo "首尾去空格: '$stripped'"
echo "多空格合并: '$single_spaced'"
echo "全部去空格: '$no_spaces'"
echo "去空行: '$non_empty_lines'"
# 输出:
# 原始: ' Hello world! This has extra spaces. '
# 首尾去空格: 'Hello world! This has extra spaces.'
# 多空格合并: 'Hello world! This has extra spaces.'
# 全部去空格: 'Helloworld!Thishasextraspaces.'
# 去空行: 'Line1\nLine2\nLine3'public class TextCleaner {
public static void main(String[] args) {
String text = " Hello world! This has extra spaces. ";
// 去除首尾空格
String stripped = text.trim();
// 合并多个连续空格为单个空格
String singleSpaced = stripped.replaceAll(" +", " ");
// 去除所有空格(包括中间)
String noSpaces = text.replaceAll("\\s+", "");
// 去除空行(保留非空行)
String lines = "Line1\n\nLine2\n\n\nLine3";
StringBuilder sb = new StringBuilder();
for (String line : lines.split("\n")) {
if (!line.trim().isEmpty()) {
if (sb.length() > 0) sb.append("\n");
sb.append(line);
}
}
String nonEmptyLines = sb.toString();
System.out.println("原始: '" + text + "'");
System.out.println("首尾去空格: '" + stripped + "'");
System.out.println("多空格合并: '" + singleSpaced + "'");
System.out.println("全部去空格: '" + noSpaces + "'");
System.out.println("去空行: '" + nonEmptyLines + "'");
// 输出:
// 原始: ' Hello world! This has extra spaces. '
// 首尾去空格: 'Hello world! This has extra spaces.'
// 多空格合并: 'Hello world! This has extra spaces.'
// 全部去空格: 'Helloworld!Thishasextraspaces.'
// 去空行: 'Line1\nLine2\nLine3'
}
}<?php
$text = " Hello world! This has extra spaces. ";
// 去除首尾空格
$stripped = trim($text);
// 合并多个连续空格为单个空格
$singleSpaced = preg_replace('/ +/', ' ', $stripped);
// 去除所有空格(包括中间)
$noSpaces = preg_replace('/\s+/', '', $text);
// 去除空行(保留非空行)
$lines = "Line1\n\nLine2\n\n\nLine3";
$nonEmptyLines = implode("\n", array_filter(explode("\n", $lines), function($line) {
return trim($line) !== '';
}));
echo "原始: '$text'\n";
echo "首尾去空格: '$stripped'\n";
echo "多空格合并: '$singleSpaced'\n";
echo "全部去空格: '$noSpaces'\n";
echo "去空行: '$nonEmptyLines'\n";
// 输出:
// 原始: ' Hello world! This has extra spaces. '
// 首尾去空格: 'Hello world! This has extra spaces.'
// 多空格合并: 'Hello world! This has extra spaces.'
// 全部去空格: 'Helloworld!Thishasextraspaces.'
// 去空行: 'Line1\nLine2\nLine3'
?>能。本工具提供「首尾去空格」模式,只移除每行开头和结尾的空白字符(包括空格、制表符),不影响行内连续空格。操作时在模式选项里勾选「首尾」即可。如果还要同时合并行内多个空格为一个空格,再勾选「多空格合并」模式,两个功能可以叠加使用。
勾选「去空行」模式即可。该模式会删除所有空白行(即只包含换行符、不含任何可见字符的行)。注意:如果某行里有空格或制表符但没文字,也会被当作非空行保留,建议先勾选「首尾去空格」去掉行尾空白,再去空行,效果更干净。
因为本工具默认会处理所有空格。如果代码缩进依赖行首空格(如 Python 或 YAML),请勿勾选「首尾去空格」或「全部去空格」模式。只使用「多空格合并」或「去空行」不会破坏缩进。建议先在小段代码上测试,确认效果后再处理全文。
勾选「多空格合并」模式。该模式会将两格及以上的连续空格压缩为单个空格,同时保留单空格不动。注意:它不会处理行首行尾的空格,如果你还需要去掉首尾空格,建议先勾选「首尾去空格」再勾选「多空格合并」,顺序不影响最终结果。
完全在浏览器本地处理。本工具实现方式标注为 FE(前端),所有处理逻辑用 JavaScript 在用户浏览器内执行,文本不会离开你的电脑。关闭页面后无任何缓存或日志残留,适合处理敏感信息如源代码、未公开文稿等。
理论上没有大小限制,但浏览器本身有内存上限。实测 10 万字(约 200KB)在主流浏览器上处理时间小于 1 秒,不会卡死。如果文档超过 50 万字(约 1MB),建议分批次粘贴处理。如果页面假死,刷新后重新粘贴即可,不会丢失已处理的结果。
手工替换在处理「首尾空格」和「多空格合并」时需要写正则(如 ^\s+|\s+$),对非技术用户门槛较高。本工具一键勾选即可,且能同时组合多种处理(如去首尾+去空行+合并空格),一次完成。另外,手工替换容易误伤行内有意保留的单个空格,本工具的「多空格合并」模式能精准保留单空格。
可能是 Word 的段落标记(¶)被误认为空格。本工具只移除空格、制表符等空白字符,不处理 Word 的段落格式标记。建议在 Word 中打开「显示/隐藏编辑标记」查看是否有段落符号。如果确定是段落格式问题,请先在 Word 中用「查找替换」将段落标记替换为换行符再粘贴回本工具处理。
检查输入文本中是否包含「全角空格」(Unicode U+3000)或「制表符」(\t)。本工具默认处理半角空格(U+0020),全角空格和制表符不会被移除。如果需要处理全角空格,请先在全角/半角转换工具中转为半角空格后再处理。制表符可以用文本编辑器的替换功能替换为空格。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。