文本工具 · 文本变换

文本排序

字典序/数字序/长度序/随机

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 59 次使用
每行一项,排序结果实时刷新
排序设置 options
输入文本 input
就绪 · 等待输入
排序结果 result
输入 input0原始行
输出 output0排序后
过滤 filtered0空行/重复
就绪 · 纯本地处理,文本不上传、不入 URL
第一节

关于本工具

About

把一列姓名按拼音首字母排成 A→Z,或把混着数字和文字的版本号按数值大小排序——手动拖拽几行还行,上百行就变成反复粘贴的苦力活。这个工具接受任意文本行,选字典序、数字序、长度序或随机打乱,一次出结果。所有排序在浏览器内完成,文本不会离开本地。

使用场景

参赛名单排序

学校运动会前,体育老师收到各班级提交的 200 人参赛名单,姓名顺序混乱。按拼音字典序排序后,打印出来的检录表与广播顺序一致,现场叫号不再跳人漏人,节省了 20 分钟人工核对时间。本工具支持一次性处理整段文本,无需逐行复制粘贴。

发票号码核对

财务月底对账,手上有 50 张发票号段(如 20241001-20241050),但系统导出的流水号是乱序的。用数字序排序后,缺失的号码(如 20241023 跳号)立即显现,比肉眼扫表快 5 倍,且不会漏掉中间断号。本工具对纯数字行自动识别为数值排序,无需手动提取前缀。

论文参考文献排序

研究生写完论文初稿,参考文献 80 条按出现顺序排列,但导师要求改为按作者姓氏字母序。用字典序排序,将每条文献单独一行,排序后自动对齐标准格式,避免手动调整时打乱编号顺序。本工具不改变原文内容,只重排行序,适合保留原始标注。

抽奖名单随机化

年会前,HR 准备了 300 名员工名单,但抽奖程序临时故障。用本工具的随机排序功能,将名单打乱后直接作为抽奖顺序,每次刷新结果不同,确保公平性。本工具基于浏览器端随机算法,不联网传输数据,适合现场临时使用。

商品标题长度优化

电商运营需要将 100 个商品标题按字符长度排序,以便快速找出超长标题(超过 30 字会被平台截断)。用长度序排序后,最长的标题排在最前,逐一修改即可。本工具以字符数(含空格)为排序依据,与主流电商平台截断规则一致。

对比矩阵

维度本工具在线排序站手工/脚本方式
隐私文本完全在浏览器处理,不上传服务器需将文本粘贴或上传至对方服务器本地操作,不涉及网络传输
速度即时处理,无网络延迟受网络速度和服务器负载影响纯手动逐行排序,耗时随行数增加
离线可用完全离线,浏览器内运行必须联网完全离线
排序方式字典序/数字序/长度序/随机,一键切换多数仅提供字典序和数字序需手动编写公式或脚本实现不同排序
大小限制受浏览器内存限制,通常数万行无压力多数有行数或字符数上限(如 5000 行)理论上无限制,受文本编辑器或脚本性能影响
注册收费免费,无需注册部分网站高级排序需付费或登录无成本,但需具备脚本编写能力
第二节

使用指南

Getting Started

使用步骤

  1. 1在输入框中粘贴或键入待排序的文本,每行一条,行尾自动识别换行符
  2. 2点击「排序方式」下拉菜单,选择字典序、数字序、长度序或随机
  3. 3勾选「升序」或「降序」切换排列方向,结果区立即更新排序后的文本
  4. 4点击结果区任意行可单独复制该行;点击「复制全部」一键拷贝全部结果

输入输出示例

输入输出说明
苹果 香蕉 橙子 苹果 葡萄橙子 苹果 苹果 葡萄 香蕉常规:字典序升序,展示中文按拼音排序,重复项(苹果)保留并相邻排列
12 3 105 7 223 7 12 22 105常规:数字序升序,验证纯数字行正确按数值而非字典序排序(105 排在 22 之后)
abc a abcd ab abcdea ab abc abcd abcde常规:长度序升序,验证短字符串在前,等长时保持原顺序(稳定排序)
单行内容单行内容边界:只有一行输入,排序后输出不变,验证工具不因无多行而报错或崩溃
空格开头 无空格 两个空格开头两个空格开头 空格开头 无空格边界:字典序时空格 ASCII 码小于字母,带空格的字符串排在前面,验证空白字符处理
行1 行3 行5行1 行3 行5边界:输入含空行,字典序时空行视为空字符串排在最后,验证空行不被忽略
123 abc 12 AB 1234123 12 1234 AB abc易错:字典序下数字字符 ASCII 小于大写字母小于小写字母,所以 123 排在 AB 前,AB 排在 abc 前,容易误以为按字母顺序
1.5 1.10 1.21.10 1.2 1.5易错:字典序按字符逐位比较,1.10 的第三位 '1' 小于 1.2 的第三位 '2',所以 1.10 排在 1.2 前,与数值大小直觉相反

常见错误对照

1.数字序排序时混入非数字行

✗ 错误输入: 第1行: 12 第2行: abc 第3行: 5
✓ 修复输入: 12 5 (移除所有非数字行)

数字序(数值排序)只处理可解析为数字的行。混入字母或符号会导致该行被当作0或NaN,排序结果不符合预期。

2.字典序排序时忽略大小写差异

✗ 错误输入: Apple apple Banana
✓ 修复输入: apple Apple Banana

字典序默认按ASCII/Unicode码点排序,大写字母(A=65)排在小写字母(a=97)之前。若需要忽略大小写,应先在工具外统一大小写。

3.长度序排序时误把空格计入长度

✗ 错误输入: "abc" "abcd"
✓ 修复输入: abc abcd

长度序按字符数排序,包括空格、制表符等空白字符。首尾空格会被计入长度,导致长度值偏离实际可见内容长度。

4.随机排序后误以为结果是可复现的

✗ 错误每次点击随机排序,期望得到相同顺序
✓ 修复若需可复现随机,应手动记录当前随机结果,或使用固定种子(本工具无种子功能)

随机排序每次独立运行,使用系统熵源生成新序列。无种子参数时,结果不可预测也不可复现。

5.字典序排序时误以为数字按数值排序

✗ 错误输入: 10 2 1
✓ 修复输入: 1 10 2

字典序将每个字符独立比较,'1'<'2',所以'10'排在'2'之前。若需要数值排序,应选择工具的数字序模式。

6.长度序排序时误以为中文按字数排序

✗ 错误输入: 你好 你好吗
✓ 修复输入: 你好 你好吗(长度2 vs 3,正确)

长度序按字符数(Unicode码点)排序,中文字符每个占1个长度单位。但若混入emoji或组合字符(如é),长度可能不等于视觉字数。

7.在字典序中误以为空行会被忽略

✗ 错误输入: apple banana
✓ 修复输入: apple banana(移除空行后再排序)

空行(长度为0的字符串)在字典序中会被视为有效行,排序后可能出现在开头或中间,干扰结果顺序。

第三节

工作原理

How It Works

核心公式

字典序比较:按字符 Unicode 码点逐位比较;数字序:提取数字前缀后按数值比较;长度序:按字符数升序;随机序:Fisher-Yates 洗牌算法

变量说明

  • a, b待比较的两个字符串
  • n待排序元素总数
  • iFisher-Yates 当前索引

示例

输入列表 ["a10", "a2", "b1"] 按数字序排序:提取数字前缀得 [10, 2, 1],排序后为 [1, 2, 10],对应原字符串顺序为 ["b1", "a2", "a10"]。

原始文本按行拆分(元素列表)排序算法(字典/数字/长度/随机)结果比较规则(按需选择)纯浏览器执行
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

4 种主流语言实现,复制即用:

import random lines = ["banana", "apple", "Cherry", "123", "apple"] # 字典序(区分大小写,大写字母 < 小写字母) sorted_lex = sorted(lines) print("字典序:", sorted_lex) # 数字序(仅保留纯数字行,按数值排序) numeric_lines = [l for l in lines if l.isdigit()] sorted_num = sorted(numeric_lines, key=int) print("数字序:", sorted_num) # 长度序 sorted_len = sorted(lines, key=len) print("长度序:", sorted_len) # 随机打乱 random.shuffle(lines) print("随机:", lines)
const lines = ['banana', 'apple', 'Cherry', '123', 'apple']; // 字典序(默认 Unicode 码点,大写字母在前) const sortedLex = [...lines].sort(); console.log('字典序:', sortedLex); // 数字序(过滤出纯数字行) const numericLines = lines.filter(l => /^\d+$/.test(l)); const sortedNum = numericLines.sort((a, b) => Number(a) - Number(b)); console.log('数字序:', sortedNum); // 长度序 const sortedLen = [...lines].sort((a, b) => a.length - b.length); console.log('长度序:', sortedLen); // 随机打乱 const shuffled = [...lines]; for (let i = shuffled.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; } console.log('随机:', shuffled);
package main import ( "fmt" "math/rand" "sort" "strconv" ) func main() { lines := []string{"banana", "apple", "Cherry", "123", "apple"} // 字典序(Go 默认按字节比较,大写字母 < 小写字母) sortedLex := make([]string, len(lines)) copy(sortedLex, lines) sort.Strings(sortedLex) fmt.Println("字典序:", sortedLex) // 数字序 var nums []int for _, l := range lines { if n, err := strconv.Atoi(l); err == nil { nums = append(nums, n) } } sort.Ints(nums) fmt.Println("数字序:", nums) // 长度序 sortedLen := make([]string, len(lines)) copy(sortedLen, lines) sort.Slice(sortedLen, func(i, j int) bool { return len(sortedLen[i]) < len(sortedLen[j]) }) fmt.Println("长度序:", sortedLen) // 随机 shuffled := make([]string, len(lines)) perm := rand.Perm(len(lines)) for i, p := range perm { shuffled[i] = lines[p] } fmt.Println("随机:", shuffled) }
#!/usr/bin/env bash lines=("banana" "apple" "Cherry" "123" "apple") # 字典序(sort 默认字典序,大写字母在前) printf '%s\n' "${lines[@]}" | sort echo "---" # 数字序(仅纯数字行) printf '%s\n' "${lines[@]}" | grep -E '^[0-9]+$' | sort -n echo "---" # 长度序 printf '%s\n' "${lines[@]}" | awk '{ print length, $0 }' | sort -n | cut -d' ' -f2- echo "---" # 随机(shuf 打乱) printf '%s\n' "${lines[@]}" | shuf
第五节

常见问题

Q & A
我有一堆文件名,像“第1章、第2章……第10章”,为什么排序后“第10章”排到了“第2章”前面?

这是字典序排序的典型现象,因为它是逐字符比较的:'第10章'中的'1'在ASCII码中比'2'小,所以排在'第2章'前面。要解决这个问题,请使用数字序排序。本工具的数字序模式能识别字符串中的数字部分,将'10'作为数值10处理,从而按正确的章节顺序排列。如果你的文本中数字前面有补零(如'第01章'),字典序也能排对。

排序后结果里有些行不见了,是不是工具出bug了?

大概率不是bug。请检查输入文本末尾是否有空行:如果最后一行是空行,排序时它会被当作一个空字符串参与排序,结果可能跑到最前面或最后面,导致你误以为少了一行。建议先检查输入内容,确保每行都有实际文字。另外,本工具对完全相同的重复行会保留,不会去重。

长度排序是按字符数还是字节数?中英文混排时准不准?

本工具长度排序是按字符数(Unicode字符长度)计算的,一个汉字算1个字符,一个英文字母也算1个字符。所以中英文混排时,'abc'(3字符)会比'你好'(2字符)长。如果你需要按字节数排序(比如处理某些数据库导出的固定宽度文本),本工具暂不支持,可以考虑先用其他工具将文本按编码转为字节后再操作。

随机排序真的完全随机吗?每次点结果都一样?

本工具随机排序基于浏览器的加密级随机数生成器(crypto.getRandomValues),每次点击都会生成全新的随机顺序,理论上不可预测。但请注意:如果你输入的内容只有一行,排序结果当然永远是那一行;如果只有两行,50%概率互换。如果需要可复现的随机顺序(比如用于测试),本工具暂不支持指定种子,建议手动记录排序前的顺序。

我有一列数字,比如“2、10、1.5、-3”,用数字序排序后为什么-3排到了最后?

数字序排序默认按数值大小升序排列,负数会排在正数前面。如果-3排到了最后,请检查你的输入中-3前面是否有空格或其他不可见字符(如全角减号、制表符)。本工具只识别标准的ASCII减号'-'作为负号,且要求数字前后无多余字符。如果一行是' -3'(前面有空格),它会被当作字符串处理,导致排序异常。建议先清理文本格式。

我的文本里有些行开头是“2023年”和“2024年”,字典序排出来2024年跑到了2023年前面,正常吗?

正常。字典序逐字符比较:'2023'和'2024',前三位'202'相同,第四位'3'比'4'小,所以2023排在2024前面。这是正确的字典序结果。如果你希望按年份数值排,使用数字序模式即可——它会将'2023'作为数值2023处理,结果与字典序一致。但如果你的文本是'2023年1月'和'2023年2月',字典序也能正确按月份排,因为'1'在'2'前面。

排序后我想恢复原来的顺序,但忘了备份,怎么办?

本工具目前没有撤销或历史记录功能,排序操作会直接覆盖结果区域。建议在排序前先复制一份原始文本到记事本或另一个标签页。如果已经排序了且没备份,唯一的办法是重新输入原始数据。对于重要数据,养成先备份的习惯。未来版本可能会考虑增加'恢复原始顺序'功能,但当前需要用户自行保留副本。

我有一千行文本,排序会卡死浏览器吗?

纯前端排序,一千行文本完全在浏览器处理能力范围内,不会卡死。本工具实现方式为FE(纯浏览器端),所有计算在本地完成,不涉及网络传输。实测在普通电脑上,一万行文本排序响应时间也在毫秒级。但如果你的单行文本特别长(如每行数万个字符),总数据量达到几十MB,可能会略微影响页面响应。建议分批次处理超大文本。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭