🧰 UtlKit

文本反转工具:31 字符的句行反转后是 "?yadot uoy era woH !dlroW olleH",按词模式给出 "today? you are How World! Hello"

输入 "Hello World! How are you today?",文本反转工具按字符给出 "?yadot uoy era woH !dlroW olleH",按词给出 "today? you are How World! Hello",按行只调换行的顺序,全部在浏览器内完成。

文本反转工具里输入 "Hello World! How are you today?",按模式不同得到三个不同的答案:按字符反转把这条 31 个字符的句行变成 "?yadot uoy era woH !dlroW olleH",按词反转保留全部 6 个词只调换顺序,得到 "today? you are How World! Hello",按行反转只调换行的顺序,每一行内容原样不动。三种结果都在浏览器里算完,没有任何请求发往服务器。

按字符反转走的是码点,不是字节

按字符模式从最后一个码点读到第一个再写回,所以每个词内部的字母也会动。"Hello World! How are you today?" 回来是 "?yadot uoy era woH !dlroW olleH",问号排到最前,Hello 的大写 H 排到最后。切分发生在码点层面而不是字节层面,表情符就是一个单位:"ab🚀cd" 返回 "dc🚀ba",火箭完整地夹在两对字母中间。字符计数器与分析器对同一输入报 6 个字符,因为它的计数跟随内部 16 位单元,火箭占两个,而可见符号是 5 个。

按词反转重排词序,顺带归一化空白

按词模式是保留词的那一个。它按空白串切输入,丢掉空片段,把词表倒序再用单个空格重连,所以 6 个词的句行返回 "today? you are How World! Hello"。重连也顺手清掉空格:"hello" 后跟三个空格再跟 "world",回来是 "world hello",一个空格,首尾不留余量。如果一段文本的空格很不规则,空白字符清理对整个文档一次应用同样的收缩到单空格规则,而这里的按词模式只在重排时归一化。

按行反转只换行的顺序

按行模式保留每一行的内容,只改它们的顺序:三行 "apple"、"banana"、"cherry" 的块回来是 "cherry"、"banana"、"apple",日志行块变成最新在前,内部一个字符都不碰。比较用法正是字符串相似度的位置:把原始块和按行倒序的孪生块喂进去,它给出两次阅读有多接近的分数,这就是回文检查的数值形式,和反转一行再问答案是否等于问法,是同一招。

反转两次回到原文

按字符模式是自己的撤销。把 "?yadot uoy era woH !dlroW olleH" 再跑一遍,拿回 "Hello World! How are you today?",31 个字符原顺序一个不差,因为一个列表反转两次就是恒等。按词模式也能往返,但只到第一次已经做过的归一化:出时把三个空格压成一个,回来时就是一个。这种成对性质,变换再逆变换,正是编码器用起来感觉相同的原因:URL 编解码器也是成对工作,先编码再解码,解码输出必须等于输入,否则这对就断了。

反转在文本管线里的位置

反转是能搭出的最便宜的编码,一次纯排列,不花一个比特,和真正花比特的编码器插在同样的管线里。文本转二进制的指南讲的是相邻的方向,把每个字符映到 8 位编码,"Hi" 读作 01001000 01101001,同样的往返逻辑适用:把编码解回去,必须落回产生它的那串字符。反转是这个家族里零成本的成员,逆操作就是操作本身,这正是写脚本的人测试管线是否保内容时第一个想到它的理由。

从反转到分析

反转的目的很少是反转后的文本本身,而是比较揭示的东西。回文、顺序检查、倒着读一段以发现眼睛跳过的东西,都是比较工作,词数与字符统计指南是这次比较另一侧数字的出处:按原样写下的块的词数、字符拆分和前 10 个高频字符。重排不改变其中任何一个,词频统计工具把它看得很清楚:反转句和原句都清洗成同样 6 个词,hello、world、how、are、you、today,各出现一次,因为重排不改变任何词、不改变任何计数。

相关工具

常见问题

文本反转工具做什么?

按三种可选模式翻转文本。输入 "Hello World! How are you today?",按字符返回 "?yadot uoy era woH !dlroW olleH",按词返回 "today? you are How World! Hello",按行只翻转行的顺序,每行内容原样。全部在浏览器内、页面上算完,没有请求发往服务器。

按字符、按词、按行三种模式有什么区别?

按字符模式移动每个码点,包括每个词内部的字母,所以 "Hello" 变成 "olleH"。按词模式保留每个词,只调换顺序,且重连时的单空格会把连续空格压成一个。按行模式只改变行的顺序,单行输入原样返回。字符模式在码点层面切分而不是字节层面,所以表情符作为一个单位移动。

能把已反转的文本再反转回来吗?

可以。按字符模式是自己的撤销:把 "?yadot uoy era woH !dlroW olleH" 再跑一遍,拿回 "Hello World! How are you today?",31 个字符一个不差。按词模式也能往返,但只到第一次已经做过的归一化:出时把三个空格压成一个,回来时就是一个,所以往返精确的前提是输入本来就是单空格。

表情符会被切成两半吗?

不会。按字符模式在码点而不是字节层面切分输入,所以 "ab🚀cd" 里的火箭整个移动,工具返回 "dc🚀ba"。字符计数器是核对:它对同一输入报 6 个字符,因为它的计数跟随内部 16 位单元,火箭占两个,而可见符号是 5 个。同一组 5 个符号的两种数法。

我的文本会上传到任何地方吗?

不会。你的输入文本和所选模式都留在浏览器里、在页面上,没有请求发往服务器。关掉标签页文本就没了;不存储、不记录、不共享。

相关文章