HandyTools Hub

文本行排序

按字母或数字排序文本行。

100% 客户端处理

输入行数: 5

输出行数: 0

文本行排序工具接收一段无序文本,按你选定的顺序返回同样的行。它支持三种排序模式,每种都有升序和降序,并且完全在浏览器中运行,粘贴客户名单或一列内部 ID 不会把数据发到任何地方。

使用方法

  1. 把文本粘贴或输入到输入区,每行一条。
  2. 选择模式:字母、数值或长度。
  3. 选择方向:升序或降序。
  4. 如果默认设置不合适,调整大小写、空白和空行选项。
  5. 从结果区复制排好序的输出。

行尾会先被统一,因此以 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 cats33
-12-12-12
2.52.52.5
1e310001000
1,00011
$5.99(失败)无穷大
v2(失败)无穷大
2.102.12.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 团队审校 · 最后更新