从Array创建唯一名称,不重复

时间:2017-02-26 17:15:38

标签: java arrays string duplicates unique

我想尝试从数组中创建唯一的名称。

public String[] firstname = {"Ben", "Pe", "To", "Jau",...};

在这里我创建了一个String(Helper.random只是一个选择随机元素的方法)。我想避免像“Benben”或“Pepe”这样的名字...

String name1 = firstname[Helper.random(0, firstname.length)];
String name2 = firstname[Helper.random(0, firstname.length)];

if(name1.equals(name2)) {
    name1 = firstname[Helper.random(0, firstname.length)];
}

现在我被卡住了。我创建了一些名字,但后来我在这里找到像“Benpe”和“Benpe”那样的复制品。

如何创建唯一名称,例如:

  

在所有组合中从此阵列创建一个STRING名称(“Bento”,Benpe“,”Bento“.....)
  如果你得到一个重复(“Bento”,Bento“)添加另一个元素来命名(”Bentope“)

2 个答案:

答案 0 :(得分:1)

一个快速的解决方案是将if更改为循环。如果你连续多次获得相同的名字,你需要继续尝试。

while (name1.equals(name2)) {
    name1 = firstname[Helper.random(0, firstname.length)];
}

请注意,ifwhile提示都不符合规范。您应该在名称中添加第三项,而不是替换name1

答案 1 :(得分:0)

我会添加一个子句来检查当前生成的名称的哈希值。如果它存在,那么我们知道我们需要为现有字符串添加另一个名称。再次检查......清洗,冲洗,重复。

例如: `

            String[] names = {"Mike", "Bill", "Jerry", "Frank", "Poul", "Terry"};
            HashMap<String, Integer> nameMap = new HashMap<String, Integer>();
            Random rand = new Random();

            for (int i=0; i<10; i++) {
                    String myFirstName = names[rand.nextInt(names.length)];
                    String mySecondName = names[rand.nextInt(names.length)];

                    String concatName = myFirstName + " " + mySecondName;
                    if ( ! nameMap.containsKey(concatName) ) {
                            nameMap.put(concatName, 1);
                    } else {
                            // try adding a third name
                            String myThirdName = names[rand.nextInt(names.length)];
                            String newName = concatName + " " + myThirdName;

                            if ( ! nameMap.containsKey(newName) ) {
                                    nameMap.put(newName, 1);
                            } else {
                                    System.out.println(newName  + " already exists in the name map");
                            }
                    }
            }

`