正如问题所说,我在最后一堂课中获得了多个决赛字符串:
public final class MyStrings {
public static final String stringOne = "this is string one";
public static final String stringTwo = "this is string two";
public static final String stringThree = "this is string three";
public static final String stringFour = "this is string four";
public static final String stringFive = "this is string five";
}
我知道将它们放在列表或数组中会更容易,但我想避免运行时填充这些结构。可能吗?从该类中随机选择字符串的最简单方法是什么?谢谢。
答案 0 :(得分:7)
您的String
似乎非常相关,因为您的用例需要随机选择其中一个。因此,无论如何,它们应该被聚集在一个数组中(从语义的角度来看)。
与当前的多个字段相比,“运行时填充”不会更多:
public final class MyStrings {
public static final String[] strings = {
"this is string one",
"this is string two",
"this is string three",
"this is string four",
"this is string five"
};
}
然后你可以用这种方式随机选择一个String
:
Random random = new Random();
String randomString = strings[random.nextInt(strings.length)]);
答案 1 :(得分:6)
String[] mystring = {
"this is string one",
"this is string two",
"this is string three",
"this is string four",
"this is string five"
};
int idx = new Random().nextInt(mystring.length);
String random = (mystring [idx]);
答案 2 :(得分:4)
将这些字符串放入最终数组并生成从0到array.length-1
答案 3 :(得分:2)
你不应该担心用这些字符串填充数组的性能成本,因为这是迄今为止最合乎逻辑的方法!
将每个字符串加载到一个数组中,并从0生成一个随机数(数组索引从0开始,小心!)到数组的末尾 - 1(因为数组从0开始,你必须从0开始减1)数组的长度)。然后使用随机数作为选择字符串的索引。
答案 4 :(得分:2)
使用枚举:
public enum MyStrings {
ONE("This is string one"),
ETCETERA("Other strings");
private final String label;
private MyStrings(String label) {
this.label = label;
}
}
然后
String randomLabel = MyStrings.values()[random.nextInt(MyStrings.values().length].label;
这有两个好处:
String
s(可能在其余代码中使类型签名更有用)。性能警告:每次调用MyStrings.values()
时,此方法都会对内存中创建新(短)数组产生轻微的性能影响。这不太可能产生任何可衡量的影响。在不太可能的情况下,你确实测量这是一个瓶颈(你可能也想使用自定义随机函数,那么),你可以优化它或者毕竟选择不同的结构。
答案 5 :(得分:-3)
使用reflection api将MyStrings.class中的所有public static final String
字段转换为数组,称为字符串
然后随机生成一个从0到numStrings - 1的整数n,
随机字符串是字符串[n]