在 Java 中,如何创建 n 个具有特定属性的字符串
in Java, how to create n number of Strings with certain properties
我想做的是生成 n 个字符串,每个字符串应该有 2 个字符和 4 个数字随机洗牌,例如:
2w3e45
34rt56
qw5498
0126fd
w5487t
等等,我有以下内容,它正在运行,可以应用任何增强功能吗?
另外,我们可以将它们作为唯一字符串吗?
import java.util.Random;
public class RandomNumAndChar {
public static void main(String[] args) {
for (int j = 0; j < 10; j++) {
Random r = new Random();
Integer[] rn = new Integer[4];
String numbers = new String();
for (int i = 0; i < rn.length; i++) {
rn[i] = r.nextInt(10);
numbers = numbers + rn[i].toString();
}
char c = (char) (r.nextInt(26) + 'a');
char c2 = (char) (r.nextInt(26) + 'a');
String chars = "" + c + c2;
String fin = numbers.concat(chars);
System.out.println(RandomNumAndChar.shuffle(fin));
}
}
public static String shuffle(String s) {
char[] characters = s.toCharArray();
for (int i = 0; i < characters.length; i++) {
int randomIndex = (int)(Math.random() * characters.length);
char temp = characters[i];
characters[i] = characters[randomIndex];
characters[randomIndex] = temp;
}
return new String(characters);
}
}
如评论中所述,这更适合 CodeReview Stack Exchange。然而,这里有一些我将用来执行任务的指南:
- 使用一个6
Character
数组来存储代码。当心我说的是 Character
,而不是 char
。这是因为 Java 在处理 wrapper 类. 时更灵活
- 使用
Collections#shuffle()
to shuffle your array. Here is where Character
comes in hand, since we need to convert the array in a List
with Arrays#asList()
.
- 使用一种方法生成整个代码,而不仅仅是为了洗牌。
使用这个简单的指南,你会得到类似的东西:
class Test {
static Random r = new Random();
public static void main(String[] a) {
for (int i = 0; i < 10; i++) {
System.out.println(getNewCode());
}
}
private static String getNewCode() {
Character[] array = new Character[6];
int i = 0;
while(i < 4) array[i++] = (char) ('0' + r.nextInt(10));
array[4] = (char) ('a' + r.nextInt(26));
array[5] = (char) ('a' + r.nextInt(26));
List<Character> l = Arrays.asList(array);
Collections.shuffle(l);
StringBuilder sb = new StringBuilder();
for (char s : l)
sb.append(s);
return sb.toString();
}
}
示例输出:
e1v456
8s632b
t7810w
n9801y
76q14c
p2a881
27m7k1
1081st
m19u36
t03h77
更方便的是,您可以直接使用 List
而不是数组:
class Test {
static Random r = new Random();
public static void main(String[] a) {
for (int i = 0; i < 10; i++) {
System.out.println(getNewCode());
}
}
private static String getNewCode() {
List<Character> l = new ArrayList<Character>();
int i = 0;
for(int i = 0; i<4; i++)
l.add((char) ('0' + r.nextInt(10)));
l.add((char) ('a' + r.nextInt(26)));
l.add((char) ('a' + r.nextInt(26)));
Collections.shuffle(l);
StringBuilder sb = new StringBuilder();
for (char s : l)
sb.append(s);
return sb.toString();
}
}
我想做的是生成 n 个字符串,每个字符串应该有 2 个字符和 4 个数字随机洗牌,例如: 2w3e45 34rt56 qw5498 0126fd w5487t
等等,我有以下内容,它正在运行,可以应用任何增强功能吗? 另外,我们可以将它们作为唯一字符串吗?
import java.util.Random;
public class RandomNumAndChar {
public static void main(String[] args) {
for (int j = 0; j < 10; j++) {
Random r = new Random();
Integer[] rn = new Integer[4];
String numbers = new String();
for (int i = 0; i < rn.length; i++) {
rn[i] = r.nextInt(10);
numbers = numbers + rn[i].toString();
}
char c = (char) (r.nextInt(26) + 'a');
char c2 = (char) (r.nextInt(26) + 'a');
String chars = "" + c + c2;
String fin = numbers.concat(chars);
System.out.println(RandomNumAndChar.shuffle(fin));
}
}
public static String shuffle(String s) {
char[] characters = s.toCharArray();
for (int i = 0; i < characters.length; i++) {
int randomIndex = (int)(Math.random() * characters.length);
char temp = characters[i];
characters[i] = characters[randomIndex];
characters[randomIndex] = temp;
}
return new String(characters);
}
}
如评论中所述,这更适合 CodeReview Stack Exchange。然而,这里有一些我将用来执行任务的指南:
- 使用一个6
Character
数组来存储代码。当心我说的是Character
,而不是char
。这是因为 Java 在处理 wrapper 类. 时更灵活
- 使用
Collections#shuffle()
to shuffle your array. Here is whereCharacter
comes in hand, since we need to convert the array in aList
withArrays#asList()
. - 使用一种方法生成整个代码,而不仅仅是为了洗牌。
使用这个简单的指南,你会得到类似的东西:
class Test {
static Random r = new Random();
public static void main(String[] a) {
for (int i = 0; i < 10; i++) {
System.out.println(getNewCode());
}
}
private static String getNewCode() {
Character[] array = new Character[6];
int i = 0;
while(i < 4) array[i++] = (char) ('0' + r.nextInt(10));
array[4] = (char) ('a' + r.nextInt(26));
array[5] = (char) ('a' + r.nextInt(26));
List<Character> l = Arrays.asList(array);
Collections.shuffle(l);
StringBuilder sb = new StringBuilder();
for (char s : l)
sb.append(s);
return sb.toString();
}
}
示例输出:
e1v456
8s632b
t7810w
n9801y
76q14c
p2a881
27m7k1
1081st
m19u36
t03h77
更方便的是,您可以直接使用 List
而不是数组:
class Test {
static Random r = new Random();
public static void main(String[] a) {
for (int i = 0; i < 10; i++) {
System.out.println(getNewCode());
}
}
private static String getNewCode() {
List<Character> l = new ArrayList<Character>();
int i = 0;
for(int i = 0; i<4; i++)
l.add((char) ('0' + r.nextInt(10)));
l.add((char) ('a' + r.nextInt(26)));
l.add((char) ('a' + r.nextInt(26)));
Collections.shuffle(l);
StringBuilder sb = new StringBuilder();
for (char s : l)
sb.append(s);
return sb.toString();
}
}