# Zufälligen String



## Karl Hermann (10. Sep 2011)

Moin,
Wie kann ich einen einfachen Code erstellen, der einen zufälligen, 10-stelligen String ausgibt bestehend aus Zahlen *und* Buchstaben?

Also dass jedes mal was anderes rauskommt.

Danke ^^


----------



## bERt0r (10. Sep 2011)

Google ist dein Freund! How to generate a random alpha-numeric string in Java - Stack Overflow


----------



## Final_Striker (10. Sep 2011)

Karl Hermann hat gesagt.:


> Wie kann ich einen einfachen Code erstellen, der einen zufälligen, 10-stelligen String ausgibt bestehend aus Zahlen und Buchstaben?



In dem du dir in einer Schleife 10 Buchstaben/Zahlen zufällig generierst und ein einander hängst.


----------



## dehlen (10. Sep 2011)

So vielleicht ?

```
public class RandomString  
{  
  public RandomString()  
  {  
    final int STRING_LENGTH = 10;  
    StringBuffer sb = new StringBuffer();  
    for (int i = 0; i < STRING_LENGTH; i++)  
    {  
      sb.append((char)((int)(Math.random()*26)+97));  
    }  
    System.out.println(sb.toString());  
  }  
  public static void main(String[] args){new RandomString();}  
}
```

EDIT:
Das ist natürlich jetzt nur für Buchstaben, wenn du auch Zahlen willst dann wirst du hier :

```
sb.append((char)((int)(Math.random()*26)+97));
```
was ändern müssen


----------



## Karl Hermann (10. Sep 2011)

Ersteinmal danke für die Antworten ^^

@dehlen: Kannst du mir auch sagen, was ich ändern muss ?
Sorry, ich hab keine Ahnung


----------



## Marco13 (10. Sep 2011)

Hatte da mal zu java Java Passwort generieren lassen form - codekicker.de was geschrieben, vielleicht ist das das, was du suchst...


----------



## Nightmares (10. Sep 2011)

Hier ne einfache Lösung zu sowas, direkt aus irgend einer Helfer Klasse die ich mal geschrieben habe und als "Standalone" umgeschrieben:


```
public class TestClass {
	
	public static void main(String[] args) {
		// erzeugt einen 10 langen string zufällig aus den angegebenen zeichen
		String rstr = getString(10,"abcdef123");
		System.out.println(rstr);
	}
	
	public static String getString(int len, String charSet) {
		String result = "";
		
		while (result.length() < len) {
			result = result + getChar(charSet);
		}
		
		return result;
	}
	
	public static char getChar(String charSet) {
		int s = getInt(charSet.length());
		return charSet.charAt(s - 1);
	}
	
	public static int getInt(int max) {
		return (int) (Math.ceil(Math.random() * max));
	}
	
}
```


----------



## JohannisderKaeufer (10. Sep 2011)

Final_Striker und Nightmares Empfehlungen haben ein kleines Problem.

Sie garantieren nicht, dass Zahlen und! Buchstaben vorhanden sind.
Es ist gut möglich, dass hier nur Buchstaben oder nur Zahlen herauskommen. 

Die Wahrscheinlichkeit bei einem zehnstelligen String nur Buchstaben zu bekommen liegt bei 3,8%.

Hier ist eine Variante die das berücksichtigt.

```
import java.util.Random;

public class RandomString {

	private static final String numbers = "0123456789";
	private static final String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	private static final char[] alphabet = (numbers + characters).toCharArray();

	public static String getRandomString(int length) {
		char[] randomString = new char[length];
		Random random = new Random();
		
		for (int i = 0; i < randomString.length; i++) {
			randomString[i] = alphabet[random.nextInt(alphabet.length)];
		}
		
		boolean containsDigits = false;
		boolean containsCharacters = false;
		for (Character c : randomString) {
			containsDigits |= numbers.contains(c.toString());
			containsCharacters |= characters.contains(c.toString());
		}
		
		if (length < 2 || (containsDigits && containsCharacters)) {
			return new String(randomString);
		} else {
			System.out.println(new String(randomString)
					+ " contained just Characters or Digits");
			return getRandomString(length);
		}
	}

	public static void main(String[] args) {
		System.out.println(getRandomString(10));
	}
}
```

Bei dieser Variante besteht allerdings das Risiko, dass das Programm sich in einer Endlosschleife verfängt, bzw. in einem Stackoverflow endet.


----------



## Marco13 (10. Sep 2011)

Der Verlinkte Codeschnipsel sollte dieses Problem nicht haben.


----------



## Nightmares (10. Sep 2011)

Ja das ist wohl richtig. Da hatte ich nicht ganz genau gelesen . Um das Endlos Problem zu lösen könnte man einfach nach z.B. 50 unerfolgreichen Versuchen eine beliebige Zahl generieren und diese an einer zufälligen Position einsetzen.


----------

