以下是随机样本问题(感谢Eyal命名它)的代码片段。不知道这是你在找什么。
请注意,如果字符串中没有足够的小写字母,则此解决方案将运行到infinete循环。所以你也需要解决这个问题,但我想这是一个起点。 ;-)
String myString = "9aie3ra3nr23rr5r21t";
System.out.println(upperCaseRandom(myString, 10));
public static String upperCaseRandom(String input, int n) {
StringBuilder output = new StringBuilder(input);
Random r = new Random();
for (int i = 0; i < n; i++) {
// Pick a place
int position = r.nextInt(input.length());
// Check if lowercase alpha
if (Character.isLowerCase(output.charAt(position))) {
output.setCharAt(position, Character.toUpperCase(output.charAt(position)));
} else {
i--;
}
}
return output.toString();
}
编辑: 这里是一个改进版本。它确切地将n个小写字母变成大写字母(如果有足够的,否则它会改变所有这些字母)。该程序不会陷入无限循环,但仍然运行时间是一个问题。
public static String upperCaseRandom(String input, int n) {
final int length = input.length();
final StringBuilder output = new StringBuilder(input);
final boolean[] alreadyChecked = new boolean[length];
final Random r = new Random();
for (int i = 0, checks = 0; i < n && checks < length; i++) {
// Pick a place
int position = r.nextInt(length);
// Check if lowercase alpha
if (!alreadyChecked[position]) {
if (Character.isLowerCase(output.charAt(position))) {
output.setCharAt(position, Character.toUpperCase(output.charAt(position)));
} else {
i--;
}
checks++;
alreadyChecked[position] = true;
} else {
i--;
}
}
return output.toString();
}
也许你能简要介绍一下你已经想出了自己的想法,然后大家一起讨论那些/给予提示? – 2010-07-20 18:12:07
当你说“随机性越高越好。”你是在寻找接近真正的随机性的字母大写和/或哪些字母大写? – jball 2010-07-20 18:14:39
添加了一些蹩脚的代码 – mkoryak 2010-07-20 18:28:53