有没有办法生成像UUID.randomUUID()这样的唯一代理字符串,但只包含字符(表示没有数字)?该字符串存储在不同主机上的多个数据库中,并且必须是系统范围唯一的(即使我同时生成两个密钥 - 即通过线程)。
答案 0 :(得分:1)
刚写了这个 - 大写字符的随机字符串:
package dan;
import java.util.Random;
public class RandText {
/**
* @param args
*/
public static void main(String[] args) {
String s = getRandomText(100);
System.out.println(s);
}
public static String getRandomText(int len) {
StringBuilder b = new StringBuilder();
Random r = new Random();
for (int i = 0; i<len;i++) {
char c = (char)(65+r.nextInt(25));
b.append(c);
}
return b.toString();
}
}
答案 1 :(得分:1)
Apache Commons Lang 3有一个名为RandomStringUtils
的类,可用于获取随机字母字符串:
int stringSize = 8; // just choose the size better suits you
String randomString = RandomStringUtils.randomAlphabetic(stringSize);
如果你需要这个是唯一的,即使多个线程正在运行,那么你需要一种方法来同步它们(可能使用synchronized
块和while
循环)并检入该数据库没有先前的字符串等于生成的字符串。
编辑 - 一个粗略的例子
Set<String> previousKeys = new HashSet<String>();
public String generateKey(int stringSize) {
String randomString = "";
synchronized(previousKeys) {
do {
randomString = RandomStringUtils.randomAlphabetic(stringSize);
} while (randomString.length() == 0 || !previousKeys.add(randomString));
}
return randomString;
}
答案 2 :(得分:0)
如果您要生成随机字符,请使用随机int生成器,并使其生成随机数65 - 122.请记住,91-96不是ascii中的A-Z或a-z。请记住,您需要将此int转换为char。
这可能会有所帮助:http://www.asciitable.com/
答案 3 :(得分:0)
String id = UUID.randomUUID().toString().replaceAll("-", "");
id.replaceAll("0","zero");
// [...]
id.replaceAll("9","nine");
我对这种做法感觉不好。
答案 4 :(得分:0)
抓住你的UUID,剥去“ - ”。转换char'1' - &gt; 'Z','2' - &gt; 'Y'等。