如何检查 Java 中的 4 位代码中是否有双字母

How to check if there are double letters in a 4 digit code in Java

上面的问题可能看起来很模糊,但它实际上是一个非常简单的想法,我似乎无法弄清楚。

它基本上是一个包含字母 A 到 F 的 4 位字母代码,例如:ABDFBAAFDBAF

现在我正在尝试做一些 post 输入处理,其中必须不可能输入代码中已有的字母,因为它必须是唯一的 4 位代码,没有重复字母.我一直在努力让它工作,但我的代码 none 似乎可以工作,所以我又从头开始向大家寻求帮助:)

我希望这有点清楚,否则我会很乐意解决它。 提前致谢。

使用此函数,您将能够查看字符串是否包含唯一字符

public static boolean checkForUnique(String str){
    boolean containsUnique = false;

    for(char c : str.toCharArray()){
        if(str.indexOf(c) == str.lastIndexOf(c)){
            containsUnique = true;
        } else {
            containsUnique = false;
        }
    }

    return containsUnique;
}

更新:

每当用户输入一个字符时,这将是 运行,如果输入失败,则意味着存在重复。您可以选择放弃该输入或显示错误。

public static boolean hasDuplicateChars(String string) {
    Set<Character> chars = new HashSet<Character>();
    for (char c : string.toCharArray()) {
        if (!chars.add(c)) return false;
    }
    return true;
}

Set is a collection that contains no duplicate elements. We will use add 方法,如果此集合尚未包含指定元素,则 return 为真。

hasDuplicateChars 函数使用 toCharArray 函数和 for 循环遍历输入字符串中的字符;每个字符都添加到最初为空的 chars 集合中。如果 add 方法 returns false 这意味着我们之前已经遇到过相同的字符。所以我们的函数 return false。

否则输入有效且方法 return 正确。

有点像伪代码,但它可以工作。

String uniquePass="";
while(uniquePass.length<4){
    String userInput=getUserInputChar()
    if(uniquePass.contains(userInput))
      rejectInputAndNotifyUser
        else
      uniquePass=uniquePass+userInput
}

如果您要验证完整的输入,您可以依靠集合语义和一些技巧

    String s = "ABAF";
    int count = new HashSet<>(Arrays.asList(s.split(""))).size();
    if (count - 1 == 4) {
        System.out.println("All ok");
    } else {
        System.out.println("Repeated letters");
    }

split("") 会将字符串拆分为一个数组,如 {"","A", "B", "A", "F"}

new HashSet<>(Arrays.asList(s.split(""))) 将创建一个包含 String 元素的 Set,并且由于 Set 将弹回已包含的元素,因此 set 的大小例如"AAAF" 将为 3(它将包含“”、"A" 和 "F")。这样您就可以使用集合的大小来确定字符串的所有字母是否都是唯一的

如果你在打字时会比解决方案取决于输入法,但你可以有类似的东西(伪东西)

if (pass.contains(letter)) {
  breakAndNotifyUser();
} else {
  pass+=letter;
}