How to generate a real unique char only string in java
是否有方法生成唯一的代理字符串,如uuid.randomuuid(),但只包含字符(表示没有数字)?该字符串存储在不同主机上的多个数据库中,并且必须是系统范围内唯一的(即使我同时生成两个键,即通过线程)。
ApacheCommonsLang3有一个名为
1 2 | int stringSize = 8; // just choose the size better suits you String randomString = RandomStringUtils.randomAlphabetic(stringSize); |
号
如果您需要它是唯一的,即使有多个线程正在运行,那么您将需要一种方法来同步它们(可能使用
编辑-一个粗略的例子
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
刚刚写了这个-随机的大写字符字符串:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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(); } } |
抓起UUID,去掉"-S"。转换字符"1"->"Z"、"2"->"Y"等。
1 2 3 4 | String id = UUID.randomUUID().toString().replaceAll("-",""); id.replaceAll("0","zero"); // [...] id.replaceAll("9","nine"); |
。
我对这种方法感到不好。
如果要生成随机字符,请使用随机整数生成器,并让它生成一个随机数65-122。但请记住,91-96在ASCII中不是A-Z或A-Z。请记住,您将希望将此int转换为char。
这可能有帮助:http://www.asciitable.com/