文本排序

在线文本排序工具,按行排序、去重、随机排列

关于文本排序

多行文本排序的核心问题是按什么排。纯字符串比较会逐位看字符编码,于是 apple 排在 Apple 后面,数字 10 排在 2 前面,中文字符则按 Unicode 码位而不是拼音顺序排,整理名单、编号、日志时必须先确认排序规则。还要处理不可见字符:Windows 换行是回车加换行、Unix 只有一个换行符,两种混用时行数会算错、行尾会残留不可见字符,行首尾多一个空格也会影响比较结果。去重与随机排列常和排序配套使用,例如先把重复行去掉再按数值升序,或者先把名单打乱用于抽样分组。浏览器本地完成排序,内容不会离开本机。

文本排序怎么用

  1. 把多行文本粘进输入框,一行一个条目,空行是否保留取决于用途。
  2. 选比较规则:按字符编码字典序、按数值大小,或忽略大小写比较。
  3. 指定升序或降序,升降序只改变输出顺序,不改动行内容。
  4. 按需勾选去重或随机打乱,去重保留第一次出现的位置。
  5. 复制输出并核对行数差了多少,判断有没有被误合并或误去重。

使用提示

  • 按数值排序前先去掉千分位逗号和货币符号,否则 1,234 会被当字符串比较;带单位的值(如 12px)建议先提取数字部分再排。
  • 换行符混用会多出空行或行尾残留不可见字符,排序前统一换行符并去掉行尾空白,否则 apple 与多一个空格的 apple 会被当成两行。
  • 中文字符串默认按 Unicode 码位排序而不是拼音,要按拼音排得先用 locale 比较器或先转拼音串再排,否则结果和常见字典顺序不一致。

文本排序常见问题

为什么数字排序 10 会排在 2 前面
因为默认按字符串逐位比较,先看第一位字符,1 的编码小于 2,所以 10 排在 2 前面。要按真实数值大小排,必须把每行解析成数字再比较,而不是直接比字符串。如果同一批数据里混了文字,整列会退化成字符串比较。
中文排序是按拼音吗
默认不是。多数实现的排序逐位比较 Unicode 码位,汉字按码位排而不是拼音顺序,结果是看起来乱序。要按拼音排,使用 Intl.Collator 并指定中文拼音排序规则生成比较器,或者把汉字先转成拼音串再排。
排序后为什么多了空行
通常是原文里有连续换行,或者 Windows 文本按单换行符切分后每行末尾残留了回车字符,显示成空行并让去重判断失效。排序前把换行符统一成同一种、顺手去掉行尾空白,多余行就会消失。
去重和排序哪个先做
一般先去重再排序,能少做一轮全量比较。但如果目标是保留最早出现的位置,去重必须保留首次出现的那条,之后再排序会打乱位置信息。动手前先明确要的是唯一值列表还是保留原始顺序去重,两者的输出顺序不同。