piapia123
zh

文本随机打乱

文本

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

把一段文本的顺序打乱,三种单位各自保留自己该保留的东西:按行只换行的先后(行数、行内容都不变);按字符在每一行内部重排(行结构不动,换行不会被当成一个可以乱跑的字);按词只换词的先后,词之间的间隔与首尾缩进留在原位。 洗牌用的是 Fisher–Yates。 常见的「随机交换几次」写法会产生有偏的排列 —— 某些顺序出现的概率明显高于另一些,而这一点在名单、抽奖这类用途上是实打实的错误。从后往前那版 Fisher–Yates 让每一种排列的概率相等。 它不是实时刷新的。 实时模式会在每次按键后重算,而你刚看到想要的顺序、还没来得及复制,下一个键就把它换掉了。所以这里要显式点「重新打乱」。

功能

  • 三种打乱单位:行、字符、词
  • Fisher–Yates 洗牌,每一种排列的概率相等,不是「随机交换几次」的近似
  • 按词打乱保留首尾空白与词间间隔,缩进不会跑到行尾
  • 按字符打乱保留行结构,emoji 与 ZWJ 序列按字形簇整体移动
  • 点一次换一批;不点就不会自动重算,方便你看清楚再复制
  • 不打乱空行之外的东西 —— 行模式里空行也是普通一行
  • 全程在浏览器本地计算,内容不上传

使用方法

  1. 粘贴要打乱的文本
  2. 选一个打乱单位
  3. 点「重新打乱」换一批,满意后点「复制」

常见问题

为什么有时候打乱之后看起来没变?
因为随机本来就允许出现原来的顺序。只有两行时,打乱后有 50% 的概率还是原顺序;三行时约 17%。要判断它是不是真的在工作,多打乱几次看结果会不会变 —— 也可以直接看更长的一批:十行的输入连续点几次几乎不可能每次都一样。这里刻意没有加「保证和上次不同」的补丁:加了之后,排列的分布就不再均匀了。
为什么不能边打字边打乱?
因为「打乱」这件事无法从输入反推。实时模式每次按键都会重算一遍,你刚看到想要的顺序、鼠标还没移到复制按钮上,下一个键就把它换掉了。所以要显式点一次按钮 —— 与 UUID 生成器、密码生成器同一条理由。
打乱是均匀的吗?
是。用的是 Fisher–Yates 洗牌(从后往前那一版),每一种排列的概率都等于 1/n!。常见的「遍历一遍、每个元素与随机位置交换」写法会产生可测量的偏差,在抽奖、抽样、随机分组这类用途上会真的出问题。

相关工具