как сгенерировать случайную строку заданного языка / локали - PullRequest
2 голосов
/ 31 января 2011

Мне нужно генерировать случайную строку в качестве вывода, Входными данными могут быть имя языка / название локали, которые уже установлены в системе.

Все предложения приветствуются. Спасибо.

взято из комментария

подпись метода может быть такой:

public String getRandomStringOfLocale(Locale locale); 

поэтому для input=Locale.ENGLISH выходные данные могут быть ="adsaswzxcvnaj" (случайными), как и для любой локали.

Ответы [ 2 ]

5 голосов
/ 31 января 2011

Это может звучать странно, но может решить вашу проблему.

Возьмите случайную статью из Википедии на языке и наборе символов, которая необходима для случайной строки.Удалите все не алфавитно-цифровые символы и теги 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 голос
/ 31 января 2011

Я думаю, что вы можете после того, как вы хотите случайных символов из одного конкретного блока кода Unicode или другого. Это правильно? Я не думаю, что Android поставляется с какими-либо определениями блоков кода, представленных в API. (Должно быть какое-то определение для методов Character.UnicodeBlock, чтобы работать, но я думаю, что это недоступно.)

Вы, вероятно, можете создать свою собственную таблицу диапазонов символов Юникода, а затем поработать над тем, как сопоставить ее с заданной локалью. Однако многие локали будут отображаться в один и тот же блок Unicode. Например, большинство языков Latin-1 (английский, испанский, французский, немецкий, ...) отображаются в блок BASIC_LATIN.

Если вам нужны случайные строки, которые могут, скажем, включать - для испанского языка, но не для английского языка, это намного сложнее.

...