文本行排序
按字母或数字排序文本行。
100% 客户端处理
输入行数: 5
输出行数: 0
文本行排序工具接收一段无序文本,按你选定的顺序返回同样的行。它支持三种排序模式,每种都有升序和降序,并且完全在浏览器中运行,粘贴客户名单或一列内部 ID 不会把数据发到任何地方。
使用方法
- 把文本粘贴或输入到输入区,每行一条。
- 选择模式:字母、数值或长度。
- 选择方向:升序或降序。
- 如果默认设置不合适,调整大小写、空白和空行选项。
- 从结果区复制排好序的输出。
行尾会先被统一,因此以 Windows CRLF 保存的文件和以 Unix LF 保存的文件行为一致。
三种排序模式
字母用 localeCompare 比较各行,它会考虑语言环境,并且默认不区分大小写。这不等同于按原始字符编码排序:它意味着带重音的字母、标点和大小写都按当前语言读者的预期排列。
数值用 parseFloat 解析每行的开头数字并按值排序。没有开头数字的行被赋予无穷大的排序值,所以升序时它们位于底部,降序时浮到顶部。
长度按去空白后行的字符数排序,适合在关键词或标题列表里找异常值。
实操示例
字母升序、不区分大小写:
banana
Apple
cherry
变成
Apple
banana
cherry
数值升序:
100
7
42
变成 7、42、100。注意字母模式会给出 100、42、7,因为字符 1 排在 4 和 7 前面。
长度升序:
fig
apple
kiwi
变成 fig(3)、kiwi(4)、apple(5)。
数值模式处理混合行:
3 cats
12 dogs
no number here
变成 3 cats、12 dogs,然后是 no number here。第三行没有开头数字,所以被当作无穷大,留在末尾。
会改变结果的选项
| 选项 | 默认 | 改变后的效果 |
|---|---|---|
| 方向 | 升序 | 反转比较,变为 Z-A、从大到小或从长到短 |
| 区分大小写 | 关 | 把 Apple 和 apple 当作不同的键 |
| 去除空白 | 开 | 关闭时,行首空格计入长度并影响比较 |
| 删除空行 | 开 | 关闭时,空行被保留并作为空字符串排序,在升序中排在最前 |
因为默认开启去空白,一行 kiwi 会被算作 4 个字符,而不是 7。关闭去空白会同时改变长度排名和任何涉及缩进的字母比较。
常见错误
- 以为
Item 42会按 42 排序。 不会,前缀把数字挡住了。要么把数字移到最前,要么去掉前缀。 - 忘了空行会消失。 如果你想保留分组之间的间隔,请关闭删除空行。
- 混用数字格式。
1,000、1.5和1 000的解析结果未必如你所料,解析失败的条目会悄悄沉到底部。 - 以为按码点排序。 字母模式使用语言排序规则,标点和大小写的位置与原始 ASCII 比较不同。
- 忽视报告的行数。 它反映的是删除空行后的数量,是检查是否意外丢失内容的好办法。
真实数据中的数字排序
数值模式的能力取决于 parseFloat 能读到什么,而该函数在遇到无法纳入数字的第一个字符时就停止。在信任排序结果之前,这些实际后果值得了解:
| 行 | parseFloat 读到 | 排序值 |
|---|---|---|
3 cats | 3 | 3 |
-12 | -12 | -12 |
2.5 | 2.5 | 2.5 |
1e3 | 1000 | 1000 |
1,000 | 1 | 1 |
$5.99 | (失败) | 无穷大 |
v2 | (失败) | 无穷大 |
2.10 | 2.1 | 2.1 |
最后一行是软件团队的陷阱。像 2.10 和 2.9 这样的语义化版本号看起来都是数字,但解析器只读第一个浮点数,于是 2.10 变成 2.1,排在 2.9 之下。处理版本号时,应拆分各段分别排序,或补零成 2.10 与 2.09,让普通排序恰好可行。
实用技巧
- 如果列表形如
Item 42,先改成42 Item再排序,或用查找替换把数字移到最前。 - 重复行会保留在排序结果中并相邻,因为排序是稳定的。想要干净的列表,先去除重复。
- 不区分大小写的字母模式是姓名和单词的正确默认值。只有当区分确实重要时才打开大小写敏感,比如给编程标识符列表排序。
- 去空白默认开启,通常正是你想要的;但如果缩进有意义,比如给代码或嵌套大纲排序,就把它关掉。
- 把报告的行数和输入对照,以发现被当作空行或纯空白悄然丢弃的行。
实际应用场景
- 在重新导入前清理导出的 CSV 名单或 ID 列。
- 按长度给关键词列表排序,找出最短、最容易命中的搜索词。
- 给带编号的日志行或测试用例排序,让输出更易读。
- 整理参考文献或术语表,要求条目按字母排列且不受大小写影响。
- 当数字位于每行开头时,按数值给分数或维度排名。
相关工具
常见问题
数值排序会找出每行里任意位置的数字吗?
不会。它对整行调用 parseFloat,而该函数只从行首读取数字。像 42 items 这样的行会按 42 排序,但 Item 42 没有开头的数字,因此被当作非数值,赋值为无穷大。升序时这些行沉到底部,降序时则浮到顶部。把数字放到最前,或先去掉前缀再排序。
字母排序区分大小写吗?
默认不区分。字母模式在比较前会把两行都转成小写,所以 Apple、apple 和 APPLE 被视为相同的键。打开区分大小写选项后,改为比较原始字符串,它们会被区分开,排序结果还取决于当前语言的排序规则。
空行和行首空格会怎样处理?
默认情况下,每行会被去除首尾空白,空行会在排序前删除。这意味着末尾换行或只含空格的行会从输出中消失,报告的行数也可能少于你粘贴的行数。这两个行为都可以关闭。
能排序 1,000 或 $5.99 这样的值吗?
不能可靠地排序。parseFloat 在遇到不属于数字的第一个字符时就停止,所以 1,000 被读成 1,$5.99 被读成非数字并推到末尾。请先把这类值转换成 1000 和 5.99 这样的纯数字,否则顺序会出错。
相同的行会保持原来的顺序吗?
会。排序是稳定的,所以当两行比较结果相等时,比如默认不区分大小写模式下的 Apple 和 apple,它们保持你粘贴时的先后顺序。数值模式下的非数值行是个特例:它们彼此都相等,因此也在列表底部保持输入顺序。
长度模式到底数的是什么?
每条去空白后行内的字符数,包括行内的空格。fig 是 3,kiwi 是 4,apple 是 5,所以升序长度正好按这个顺序排列。它不数单词也不数字节,因此五个汉字的行算作 5,尽管它在 UTF-8 里可能有 15 字节。
由 HandyTools Hub 团队审校 · 最后更新