如何从Java中的多个终结字符串中随机选取一个字符串?

时间:2014-04-29 09:25:55

标签: java string random final

正如问题所说,我在最后一堂课中获得了多个决赛字符串:

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";

}

我知道将它们放在列表或数组中会更容易,但我想避免运行时填充这些结构。可能吗?从该类中随机选择字符串的最简单方法是什么?谢谢。

6 个答案:

答案 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;

这有两个好处:

  1. 它允许您延迟将枚举值转换为String s(可能在其余代码中使类型签名更有用)。
  2. 它会阻止您将数组值替换为其他字符串。
  3. 性能警告:每次调用MyStrings.values()时,此方法都会对内存中创建新(短)数组产生轻微的性能影响。这不太可能产生任何可衡量的影响。在不太可能的情况下,你确实测量这是一个瓶颈(你可能也想使用自定义随机函数,那么),你可以优化它或者毕竟选择不同的结构。

答案 5 :(得分:-3)

使用reflection api将MyStrings.class中的所有public static final String字段转换为数组,称为字符串

然后随机生成一个从0到numStrings - 1的整数n,

随机字符串是字符串[n]