如何在Java中生成伪随机“可读”字符串?

时间:2009-08-20 14:07:19

标签: c# java algorithm string random

生成给定长度的真正随机字符串是一个相当简单(并且已经很好覆盖)的任务。

然而;我想生成一个“伪”随机字符串,其附加约束条件是相对容易阅读(对于母语英语读者而言)。

我认为另一种说法是说生成的字符串应该由“可识别的音节”组成。例如,“akdjfwv”是一个随机字符串,但它根本无法识别。 “flamyom”;然而,这是非常“可辨认的”(即使这是无稽之谈。)

显然,人们可以列出一长串“可识别的音节”,然后随机选择它们。

但是,是否有更好的方法可以通过编程方式生成“可识别的音节”或生成“音节”,然后测试它是否“可识别”?

我可以想到几种方法来实现这个实现,但如果有人已经实现了它(最好是Java或C#),我宁愿重复使用它们的工作。

有什么想法吗?

8 个答案:

答案 0 :(得分:17)

您可以尝试实施Markov chain并为其提供合适的流程。有Java implementation可能适合您。

  

这是来自英语的Genesis和西班牙语的Genesis(N = 1)之间插值的样本:

     

在bersaran thelely和avin inder ththem lovig weay waw thod mofin tht ft tt llsedsed od ma。 lllar t land fingujod maid af de wand tetodamoiz fosu Andesp。 ersunen thenas lowhejod whipanirede tifinas GofuavithiladgióYDiche fua Dios co l,liens lyYcrerdíquenticuesereregoshielaseagúnduumarbasiarasenslaragúncoruruálaciéluelamagúnerenDiena He。

答案 1 :(得分:7)

我认为这应该做你想要的:

Java Password Generator

它具有源代码和许可许可证,因此您可以根据需要调整源代码。

答案 2 :(得分:5)

您需要生成随机音节。最简单的方法是使用辅音 - 元音或辅音 - 元音 - 辅音的音节。从辅音和元音列表中,随机选择构建音节,然后将音节连接在一起制作一个字符串。

请记住,您的辅音列表不应该是辅音字母,而应是音素,因此“th”,“st”,“sl”等可能是辅音列表中的条目。

答案 3 :(得分:2)

你真的应该看看 SCIgen 。它产生了完整的半废话科学论文:http://pdos.csail.mit.edu/scigen/

源代码可用:它是在GPL下发布的,目前可以通过匿名CVS获得。

答案 4 :(得分:1)

我不确定你到底需要什么,但是如果印刷行业的图形处理人员使用Lorem Ipsum生成器来创建看起来像文本的文本,那么你的大脑就会处理它而不是实际上是可读的单词。更多信息here

我不知道是否有可以订阅的网络服务,但有几个网站只会为您生成Lorem Ipsum字符串,因此您可以使用它们。

答案 5 :(得分:1)

Programming Pearls中有一个很好的部分。它在线,但我强烈建议购买这本书;在我看来,这是最好的编程书之一。

答案 6 :(得分:1)

那里有很多Lorem Ipsum发电机。

答案 7 :(得分:0)

所有人都回到了你想要的原因。如果你只是想要“明显的胡言乱语”,我认为最简单的方法就是产生交替的辅音和元音。这将是所有明显的胡言乱语的一小部分,但目标是什么?为了给出更广泛的范围,你可以创建一个辅音音素和元音音素表,辅音列表不仅包括单词字母,如“b”和“d”,还包括“th”,“br”等,以及元音列表可以包括“oo”和“ea”等。还有一个步骤是生成音节而不是字母,音节包含元音,辅音元音或辅音元音辅音。也就是说,循环创建音节,然后在音节中选择三种模式中的一种。你可能想要连续禁止两个元音音节。 (我试着用英语想一个例子。它可能会发生,但我能想到的唯一例子是借用其他语言,比如“stoa”。)