2017-09-02 3 views
-2

Ich versuche, den Code aufzuzeichnen, um die zufällige Zeichenfolge von 5 Zeichen aus einer vordefinierten Zeichenfolge zu generieren.Generieren einer zufälligen Zeichenfolge in Java, ohne zufällige Klasse oder Methode direkt für Zeichenfolge zu verwenden

Mein Ziel ist es, ein String-Array der Länge 5 zu erstellen und alle 5 zufälligen Strings in diesem Array zu speichern. So

, bis jetzt habe ich unten Code geschrieben:

public static String generateRandomString(int stringlength, String fullstring){ 
     //Generating random number which will use to pick character from provider string at index[i] 
     int i =((int)(Math.random()*100)); 

     //Created a character array to store the characters picked up from provided String 
     char [] randomString = new char[5]; 

     //Checking the condition if generated random number is greater than or equals to string length to avoid OutOfBoundException 
     if (i>=stringlength){ 
      generateRandomString(stringlength, fullstring); 
     } 
     //Else Fetching the character from provided string and storing it into Char[] 
     else 
     { 

       randomString [0] = (fullstring.charAt(i)); 
       randomString [1] = (fullstring.charAt(i)); 
       randomString [2] = (fullstring.charAt(i)); 
       randomString [3] = (fullstring.charAt(i)); 
       randomString [4] = (fullstring.charAt(i)); 
     } 
     //Converting Char[] to String. 
     String returnString = new String(randomString); 

     //Returning String 
     return returnString; 

    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     //String Array to Store Random Strings 
     String [] array = new String[5]; 

     //Provided String 
     String fullstring = "abcdefghijklmnopqrstuvwxyz"; 
     int stringlength = fullstring.length(); 

     //Loop to store random strings into all indexes of String[] 
     for(int j=0;j<5;j++){ 

     array[j]=generateRandomString(stringlength, fullstring); 
     } 

     //Printing Final String[] 
     for(String var:array){ 
      System.out.println(var); 
     } 

    } 

Aber ich bin vor zwei Fragen:

  1. ich meine zufällige Zeichenfolge wollen nicht nur einzelne Zeichen enthalten, meine aktuellen Code wählt nur einen Charakter für alle 5 Orte. Weil es einen Wert nimmt (i). Ich möchte meinen Wert von (i) zu jedem zufälligen Wert nach jedem Zeichen, das für einen Index bei char [] gespeichert wurde, ändern.

z.B.

Ich erhalte "aaaaa" für eine zufällige Zeichenfolge, aber ich möchte wie "auzje"

  1. Wenn ich den Druck der Schluss String [], manchmal bekomme ich NULL string in meiner Ausgabe.

z.B. ""

"aaaaa"

""

"ggggg"

"iiiii"

Was ich endlich bin auf der Suche nach ist:

" ajsuh "

"ldugj"

"odueb"

"mcnde"

"yahnf"

Bitte vorschlagen.

Vielen Dank.

+2

'Zufall [0] = (fullstring.charAt (i)); randomString [1] = (fullstring.charAt (i)); randomString [2] = (fullstring.charAt (i)); randomString [3] = (fullstring.charAt (i)); randomString [4] = (fullstring.charAt (i)); 'ist dein Schuldiger. Versuchen Sie das Debuggen, warum ... – nullpointer

Antwort

1

können Sie

ändern
if (i>=stringlength){ 
    generateRandomString(stringlength, fullstring); 
} else { // this is where you're saving all similar characters to the array 
    randomString [0] = (fullstring.charAt(i)); 
    randomString [1] = (fullstring.charAt(i)); 
    randomString [2] = (fullstring.charAt(i)); 
    randomString [3] = (fullstring.charAt(i)); 
    randomString [4] = (fullstring.charAt(i)); 
} 

zu

randomString [0] = (fullstring.charAt((int)(Math.random()*100) % stringlength)); 
randomString [1] = (fullstring.charAt((int)(Math.random()*100) % stringlength)); 
randomString [2] = (fullstring.charAt((int)(Math.random()*100) % stringlength)); 
randomString [3] = (fullstring.charAt((int)(Math.random()*100) % stringlength)); 
randomString [4] = (fullstring.charAt((int)(Math.random()*100) % stringlength)); 

Obwohl der Code weiter gereinigt und abstrahiert werden kann, sondern werden zufällige Zeichen von Ihrem fullstring-char[] ‚s verschiedenen Indizes zuweisen.

+1

Es funktioniert perfekt für mich .. aber ich bekomme immer noch nicht, was ich vermisst wurde, tut mir leid zu fragen, aber ich bin neu in Java. Kannst du bitte etwas mehr Licht auf den Fehler in meinem Code, den ich geschrieben habe. Vielen Dank. – Shan

+0

Wie in dem Kommentar Ihres Codeblocks erwähnt. Sie haben den gleichen konstanten Wert von 'i' verwendet, um das Zeichen in verschiedenen Indizes von 'randomString []' zu speichern, daher die Duplizität des gleichen Zeichens fünfmal. – nullpointer

+0

Ja, aber warum gab es NULL String zum Zeitpunkt des Druckens des Array (Problem 2 von meiner Abfrage)? – Shan

0

Sie müssen für jedes Ausgabesymbol ein neues Zeichen generieren.Angenommen, Sie verwenden Java 8+, können Sie eine Stream zufällige Zeichen aus Ihrer Eingabe fullstring generieren - begrenzen Sie es auf stringlength und sammeln Sie dann zu einem String; wie

public static String generateRandomString(int stringlength, String fullstring) { 
    return Stream.generate(() -> Character.toString(fullstring.charAt(// 
      (int) (Math.random() * fullstring.length())))) // 
      .limit(stringlength).collect(Collectors.joining()); 
} 

Dann, wenn es aufgerufen wird, erzeugen wieder fünf zufälligen Charakter String (n) und an die fünf String (n) gewünschte Grenze, und es schließlich sammeln. mit einem Array ist vielleicht ein wenig klobig, kann aber wie

public static void main(String[] args) { 
    String fullstring = "abcdefghijklmnopqrstuvwxyz"; 
    String[] r = Stream.generate(() -> generateRandomString(5, fullstring)) // 
      .limit(5).collect(Collectors.toList()).toArray(new String[5]); 
    System.out.println(Arrays.toString(r)); 
} 
0

Ein einfacher erreicht werden, aber ein wenig Speicher hungrig Art und Weise, dies zu tun ist durch eine Anordnung der akzeptablen Zeichen definiert und einen Index Kommissionierung durch die Random-Klasse oder Math.random()

Beispiel:

String randomString(int length, char[] chars) 
{ 
     char[] result = new char[length]; 
     Random rand = new Random(); 
     for(int x = 0; x < length; x++) 
      result [x] = chars [Math.abs(rand.nextInt())%chars.length]; 
     return new String(result); 
} 
Verwandte Themen