如何生成给定语言/语言环境的随机字符串

时间:2011-01-31 08:30:44

标签: java string random core

我需要生成随机字符串作为输出, 输入可以是已安装在System中的语言名称/语言环境名称。

所有建议都表示赞赏。 感谢。

取自评论

方法签名可以是:

public String getRandomStringOfLocale(Locale locale); 

因此对于input=Locale.ENGLISH输出可以="adsaswzxcvnaj"(随机)对任何区域设置都是明智的。

2 个答案:

答案 0 :(得分:5)

这可能听起来很奇怪,但可以解决您的问题。

Wikipedia获取随机文章,其中包含您需要随机字符串的语言和字符集。删除所有非字母数字字符和HTML标记。实例化随机整数生成器并使用它从表示文本的字符串中选择字符。

String text = WikipediaGrabber.grab(Locale.FRENCH);
text = removeNonAlphaNumericCharacters(text);
Random r = new Random();
StringBuilder word = new StringBuilder();
for (int i = 0; i < NUMBER_OF_CHARACTERS_PER_RANDOM_STRING; i++)
{
  int index = r.nextInt() * text.length();
  word.append(text.substring(index, index+1);
}
System.out.println("random string in French: " + word.toString());

答案 1 :(得分:1)

我认为您可能想要的是您想要来自一个特定Unicode代码块或其他字符串的随机字符。是对的吗?我不认为Android附带了API中公开的代码块的任何定义。 (必须有一些Character.UnicodeBlock方法的定义才能工作,但我认为它无法访问。)

您可以生成自己的Unicode字符范围表,然后在给定区域设置时确定如何匹配一个。但是,许多语言环境将映射到同一个Unicode块。例如,大多数Latin-1语言(英语,西班牙语,法语,德语......)将映射到BASIC_LATIN块。

如果你想要随机字符串,例如,包括ñ用于西班牙语语言环境而不是英语语言环境,那就更难了。