当前位置: 首页 > 知识库问答 >
问题:

如何使用ENUM从三个字符串中返回随机字符串?

乐正心水
2023-03-14

通过使用下面的代码,我可以找出我所在的数据中心,它工作正常。。

public enum DatacenterEnum {

    DEV, DC1, DC2, DC3;

    private static DatacenterEnum compareLocation() {
        String ourhost = getHostName();

        for (DatacenterEnum dc : values()) {
            String namepart = "." + dc.name().toLowerCase() + ".";
            if (ourhost.indexOf(namepart) >= 0) {
            return dc;
            }
        }
        return null;// I don't want to do this now.
    }
}

但它可能无法找到任何数据中心,因此目前我正在返回null

是否有任何直接的方式或单行命令,我可以在ENUM中随机返回DC1DC2DC3而不是返回null

我知道一种方法是列出字符串,然后随机选择0到2(包括0到2)之间的任何整数,然后找到字符串。但它的代码太多了,事实上,它不仅仅是想看看有没有其他方法可以做到这一点?

我可以在枚举中直接使用任何简单而直接的方法吗?

共有3个答案

微生承业
2023-03-14

您可以使用值()方法,它返回一个数组。然后只需使用Math.random()返回一个随机实例。

以下是一个示例

public static void main (String[] args) {
    String[] arr = {"DEV","DC1","DC2","DC3"}; //returned by Enum.values(), you get the idea
    String randElement = arr[(int) ((Math.random() * 3) +1)]; 
    System.out.println(randElement);
}

基本上可以归结为生成一个介于1和n之间的随机数:)

谢俊英
2023-03-14

这是一个适用于任何枚举的通用解决方案。

单一排除的方便方法:

public static <E extends Enum<E>> E getRandom(Class<E> aEnum, E exclude) {
    return getRandom(aEnum, Collections.singletonList(exclude));
}

用于一个或多个排除的通用方法:

public static <E extends Enum<E>> E getRandom(Class<E> aEnum, List<E> exclude){
    //Convert set of enums into a list
    List<E> enums = new ArrayList<E>(EnumSet.allOf(aEnum));

    //Remove items from the list that you want to exclude
    enums.removeAll(exclude);

    int size = enums.size();
    if(size != 0){
        //Get random enum
        int randomIndex = new Random().nextInt(size);
        return enums.get(randomIndex);
    } else {
        throw new IllegalArgumentException("Empty Enumeration after excludes");
    }
}

对于你的例子,你可以打电话

EnumUtil.getRandom(DatacenterEnum.class, DatacenterEnum.DEV);
向实
2023-03-14

这里有一句话:

return DataCenterEnum.values()[new Random().nextInt(3) + 1)];

对于那些需要对代码进行更严格控制的人,这里有一个更安全的版本,它不依赖于枚举实例的顺序:

return new DataCenterEnum[]{DC1, DC2, DC3}[new Random().nextInt(3)];
 类似资料:
  • 问题内容: 好的,这就是我的for子手游戏代码,我唯一要做的就是让我的程序将其中一个单词随机化,这应该在方法中成功完成。但是我唯一的问题是让String变量 “ word” 返回到主类(在主类中的所有 “ word” 变量下面都有错误)。 如果我可以通过这种方法获得另一种帮助,或者从列表中产生随机单词的另一种方法,那将是惊人的。 问题答案: 在Java中,参数是通过值而不是引用传递的。因此,您不能

  • 问题内容: 我想创建精确的5个随机字符串,并尽可能减少重复。最好的方法是什么?谢谢。 问题答案: 这将是我最好的猜测-除非您也要寻找特殊字符: 例 而且,对于基于时钟的时钟(由于它是递增的,因此冲突较少): 注意:增量意味着更容易猜测; 如果您将其用作盐或验证令牌,请不要使用。盐(现在)为“ WCWyb”表示从现在起5秒钟为“ WCWyg”)

  • 问题内容: 我想要一个5个字符串,该字符串由从集合中随机选择的字符组成。 用JavaScript做到这一点的最佳方法是什么? 问题答案: 我认为这将为您工作:

  • 我想打这个电话并返回一个字符串,但我有这个错误: “java.lang.非法状态异常:块()/块第一()/块最后())正在阻塞,这在线程反应器中不受支持” 我不明白为什么我做错了?WebClient支持异步和同步调用。 这是一个只有3个依赖的springboot项目。 我怎么能像正常的同步调用一样只返回一个字符串? 谢谢。

  • 问题内容: 如何在Python中创建随机字符串? 我需要先编号然后重复字符,直到完成为止,这就是我创建的 问题答案: 从(例如)小写字符生成字符串: 结果:

  • 问题内容: 我有阵列中的国家/地区列表,我想从列表中选择一个国家/地区(可能是使用随机的?),但是我自己还没有找到答案… 这是我到目前为止所拥有的: 问题答案: 尝试: