2013-01-22 153 views
-2

我寫了一個程序,我想要一些以大寫字母+數字開頭的輸出。然後從允許的字符中隨機生成一些。隨機密碼生成

但我發現輸出包含如下空格:k r w ea。而我預計:W3krwea

我不知道爲什麼這些空格出現在我的輸出中。

import java.util.Random; 
import sun.security.util.Password; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author taskin 
*/ 

    public class RPG 
{ 

    public static String generate(String allowedCharacters, 
            boolean mustHaveUppercase, boolean mustHaveDigit, 
            int minLength, int maxLength) 
    { 
     Random rand=new Random(); 
     String rp = null; // Random Password 
     int Length=allowedCharacters.length(); 
     char[] password=new char[25]; 
     int [] asc=new int[18]; 
     char[] UpperCase=new char[25]; 
     char[] Digit=new char[25]; 
     char[] Mixed=new char[25]; 
     int point1=0,point2=0,point3=0; 

     for (int i=0;i<Length;i++) 
     { 
      asc[i]=(int)allowedCharacters.charAt(i); 

     } 
     for (int k=0;k<Length;k++) 
     { 
      if (asc[k]>=65 && asc[k]<=90) 
      { 
       UpperCase[point1]=(char)asc[k]; 
       point1++; 
       continue; 
      } 
      else if (asc[k]>=48 && asc[k]<=57) 
      { 
       Digit[point2]=(char)asc[k]; 
       point2++; 
       continue; 
      } 
      else 
      { 
       Mixed[point3]=(char)asc[k]; 
       point3++; 
      } 

     } 
     StringBuilder strbld=new StringBuilder(); 
     int length=maxLength-minLength+1+minLength; 
     strbld.append(UpperCase[rand.nextInt(UpperCase.length)]);//get a uppercase char 
     strbld.append(Digit[rand.nextInt(Digit.length)]);//get a digit 
     for(int i=0;i<length-2;i++){ 
      strbld.append(Mixed[rand.nextInt(Mixed.length)]); 
     } 
     rp=strbld.toString(); 

     // Your code to set rp appropriately goes here 

     return rp; 
    } 

    public static void main(String[] args) 
    { 
     String allowedCharacters = "weakPasSWorD1234$*"; 
     boolean mustHaveUppercase = true; 
     boolean mustHaveDigit = true; 
     int minLength = 3; 
     int maxLength = 20; 
     String randomPassword = generate(allowedCharacters, 
             mustHaveUppercase, mustHaveDigit, minLength, 
             maxLength); 
     System.out.println("Random password: " + randomPassword); 
    } 
} 
+0

你有紅色的[FAQ](http://stackoverflow.com/faq)嗎? – linski

回答

1

.length你使用的是什麼,就會回報你Char array.Which的總長度大約爲25或something.But,在現實中,你的長度大約是4-5 chars.So,它會給請注意:功能與.length()不一樣(你誤解我認爲)。

請看THIS線程使概念清晰。

使用與您在循環中使用的長度相同的長度。 的StringBuilder塊更改爲:

StringBuilder strbld=new StringBuilder(); 
    int length=maxLength-minLength+1+minLength; 
    System.out.println("n  "+strbld.append(UpperCase[rand.nextInt(point1)]));//; 

    //get a uppercase char 
    strbld.append(Digit[rand.nextInt(point2)]); 
    for(int i=0;i<length-2;i++){ 
     strbld.append(Mixed[rand.nextInt(point3)]); 

輸出:

W1aearere$karasa$akke 

沒有空格。

+0

感謝它的工作... – Taskin

+0

@Taskin再次歡迎!那麼下一次這個密碼的任何問題的事情,只問我只是。同一主題的許多問題是不值得的(就像你最後2線程)保重! –