簡體   English   中英

生成指定長度的隨機字符串,該字符串僅包含指定字符(在Java中)

[英]Generate a random string of specified length that contains only specified characters (in Java)

有人知道在Java中生成指定長度和字符的隨機String的好方法嗎?

例如,“長度”可以是5,“可能的字符”可以是“ a,b,c,1,2,3 ,!”。

所以

c!a1b有效

cba16不是。

我可以嘗試從頭開始編寫一些東西,但我覺得這對於生成密碼,生成優惠券代碼等必定是一個常見用例。

有任何想法嗎?

執行此操作的代碼很短。 使用char []或具有N個合法字符的String,並在長度上選擇一個介於0到N-1之間的隨機數R,使用R來選擇一個字符以附加到生成的String上。

你想要這樣的東西嗎?

Random r=new Random();

char[] possibleChars="abc123!".toCharArray();
int length=5;

char[] newPassword=new char[length];

for (int i=0; i<length;i++)
    newPassword[i]=possibleChars[r.nextInt(possibleChars.length)];

System.out.println(new String(newPassword));

我可以嘗試從頭開始編寫一些東西,但我覺得這對於生成密碼,生成優惠券代碼等必定是一個常見用例。

這種情況並不常見,每次的詳細要求都不相同。 此外,代碼很簡單,以至於變得微不足道。 (模范下面的關注點……實際上是關於需求而非解決方案的。)

簡而言之,編寫自己的方法比尋找現有的庫方法要快。


當您使用包含隨機數的方案時,您需要意識到發生沖突的可能性。 也就是說,該方法將多次生成相同的隨機字符串。 您可以通過使用更長的字符串來緩解這種情況,但這只能在一定程度上起作用……具體取決於您的隨機數生成器。 (典型的隨機數生成器實際上是偽隨機數生成器,並產生最終循環的數字序列。即使使用完美的隨機數生成器,在短序列上重復的概率也有限。)

實際上,這是為什么“一刀切”的解決方案不是一個好主意的另一個原因。

如果這是為了真正的安全而不是作業或編程練習,請使用SecureRandom,而不是Random。

閱讀Diceware網站,了解有關隨機生成密碼和其他內容的很多很好的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM