【问题标题】:What is the best way to ensure that all inputs are all unique Numbers确保所有输入都是唯一数字的最佳方法是什么
【发布时间】:2022-06-20 20:49:28
【问题描述】:

这是一个示例输入:

字符串测试 = "1 2 3 4 5 42"; 字符串 test2 = test.replaceAll(" ","");

public static boolean uniqueNumbers(String test2) {
    char[] testEntries= test2.toCharArray();
    Set<Character> set = new HashSet<>();
    
    for (int i = 0 ; i < testEntries.length ; i++ ) {
        if(!set.add(testEntries[i])) {
            return false;
        }
    }
    return true;
}

尽管都是唯一的数字,但它会返回 false。有没有办法解决这个问题?

【问题讨论】:

  • 这是因为您检查的是重复字符,而不是数字。虽然 4 和 42 不同,但都包含 4,所以它返回 false。
  • 您正在使用test.replaceAll(" ","") 删除所有空格,因此您要检查的数字是1234542。您打算如何区分该号码中的2442
  • 是的,这就是我卡住的部分。我知道它在检查 1234542 之间返回 false。
  • 您需要将原始字符串传递给uniqueNumbers,因为如果您传递已经替换了空格的字符串,那么将24与@区分开来已经太迟了987654330@。然后在空格上拆分字符串,这样你就得到了一个包含所有单独数字的数组,而不是每个字符的数组。

标签: java


【解决方案1】:

你应该首先用 split() 分割你的输入参数。

String test = "1 2 3 4 5 42";
String[] origin = test.split(" ");
Set<String> check = new HashSet<>(Arrays.asList(origin));
for (String el : check) {
    System.out.println(el);
}

【讨论】:

    【解决方案2】:

    Set.of 捕获IllegalArgumentException

    Java 9+ 中的Set.of 便捷方法在传递数组时会创建一个未指定实现的Set。如果在构建此 Set 时遇到任何重复项,则会引发异常。您可以捕获 IllegalArgumentException 以了解您的字符串的各个部分是否不同。

    我们可以通过调用String#split 来获取字符串各部分的数组。

    Boolean isDistinct;
    try
    {
        Set.of( "1 3 3 4 5 42".split( " " ) );
        isDistinct = Boolean.TRUE;
    }
    catch ( IllegalArgumentException e )
    {
        isDistinct = Boolean.FALSE;
    }
    
    System.out.println( "Input is distinct: " + Objects.requireNonNull( isDistinct ) );
    

    看到这个code run live at Ideone.com

    输入不同:假

    【讨论】:

      【解决方案3】:

      当您将 String 参数传递给 uniqueNumbers() 时,它看起来像

      1234542
      

      将其拆分为 char 数组将每个单个字符作为一个单独的元素,例如立即打印输出:

      char[] testEntries = test2.toCharArray();
      System.out.println(Arrays.toString(testEntries));
      //output: [1, 2, 3, 4, 5, 4, 2]
      

      所以 2 在将每个元素传递给 set 时,发现 2 在索引 1 和 6 处重复。

      在这种情况下,一种解决方案是使用 String 的实例 split() 通过原始拆分测试。

          String test = "1 2 3 4 5 42";
          String[] test2=test.split(" ");
      
      
          public static boolean uniqueNumbers(String testEntries[]) {
      
          Set<String> set = new HashSet<>();
      
          for (int i = 0; i < testEntries.length; i++) {
              if (!set.add(testEntries[i])) {
                  return false;
              }
          }
          return true;
      }
      
      //output: true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-09
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        相关资源
        最近更新 更多