Chaine de caractères aléatoire

Résolu/Fermé
shadow - 23 févr. 2013 à 16:49
 shadow - 24 févr. 2013 à 16:48
Hello!

Je génère une chaîne de caractères aléatoire avec la méthode randomUUID().

public static void main (String argv[]){
		UUID length =  new UUID(0,31);
		UUID chaine = length.randomUUID();
		System.out.println(chaine);
	}


Une chaîne de caractère de ce type m'est retournée:
dca1c987-27e6-468f-be2a-f69993f244c5



Deux choses:
1) Quelques soient les paramètres donnés au constructeur UUID (UUID(long mostSigBits, long leastSigBits) ), la taille de la chaîne reste inchangée. Pourquoi? Ça n'est pas sensé spécifier sa taille?
2)Les 4 traits d'union étant toujours présents à la même position, j'ai supposé qu'ils ne faisaient pas parti de la chaîne. Si c'est bien le cas, auriez-vous une idée de comment je pourrais les supprimer?

Je vous remercie.
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 févr. 2013 à 11:07
Le UUID (Universal Unique IDentifier), n'est pas fait pour générer une chaîne de caractères aléatoires, mais comme son nom l'indique un identifiant !

Si tu veux de l'aléatoire, utilise la classe Random, tu peux ensuite mettre en forme un BigInteger dans la base de ton choix. Par exemple la base 36 qui permet d'avoir une représentation des entiers aléatoires avec 10 chiffres et 26 lettres.

Exemple :

private static final Random random = new Random();

/**
 * @param p poids de l'entier (en octets)
 * @param n nombre de caractères à utiliser (entre 2 et 36)
 * @return une chaîne de caractères représentant en base 'n' un entier aléatoire de 'p' octets 
 */
public static String randomString(int p, int n)
{
	byte[] bytes = new byte[p];
	random.nextBytes(bytes);
	BigInteger big = new BigInteger(bytes).abs();
	return big.toString(n);
}

/**
 * @param length taille de la chaine de caractères
 * @return une chaîne de caractères de taille 'length' représentées avec tous les chiffres et lettres.
 */
public static String randomString(int length)
{
	String str = randomString(length,36);
	return str.substring(str.length()-length);
}
1
Merci pour ton explication et ton exemple KK!
0