【问题标题】:Java Number comparisonsJava 编号比较
【发布时间】:2009-03-16 18:04:37
【问题描述】:

有什么方法可以用来查看一个数字是否以与另一个数字相同的数字开头? 前任。 5643 和 5377 都以 5 开头。

有没有办法用数字来做到这一点,还是必须是字符串? (startsWith?)

【问题讨论】:

  • 你说“56”和“5213456”是不是同一个数字开头的?
  • 您是出于某种抽象的原因想要避免使用字符串,还是有真正的理由避免使用它们?
  • “50”和“-5”是否以相同的数字开头?

标签: java startswith


【解决方案1】:

Ich n1 和 n2 是你的数字:

return (n1.toString().charAt(0) == n2.toString().charAt(0));

您必须使用 Integer 而不是 int,因为 int 没有 .toString() 方法。

如果 n1 是 int,您可以使用 new Integer(n1).toString()。

甚至更好(Bombe 建议):

String.valueOf(n1).charAt(0) == String.valueOf(n2).charAt(0)

【讨论】:

  • 你也可以使用“String.valueOf(n1).charAt(0) == String.valueOf(n2).charAt(0)”。这样你就可以使用任何你想要的整数类型。它甚至适用于双打。
【解决方案2】:

递归除以十,直到整个除法小于十,然后那个数是第一个,你可以比较数字。

【讨论】:

    【解决方案3】:

    你可以计算第一个数字:

    public int getFirstDigit(int number) {
        while (number >= 10) {
            number /= 10;
        }
        return number;
    }
    

    (这仅适用于正数。)

    但话又说回来,您可以只比较字符串表示的第一个字符。字符串比较可能会比较慢,但由于您的问题是“获取字符串表示的第一个字符”,它可能只是合适的解决方案。 :)

    【讨论】:

      【解决方案4】:

      最直接的方法(允许不同的长度值)可能就像你说的那样,将它们都转换为字符串。

      int x = 5643;
      int y = 5377;
      String sx, sy;
      
      sx = "" + x;        // Converts int 5643 to String "5643"
      sy = "" + y;
      
      boolean match = (sx.charAt(0) == sy.charAt(0));
      

      【讨论】:

      • 我不认为你可以做 sx。[0]在爪哇。对我来说,这闻起来像 C# 主义。
      • @Paul:谢谢,我最近写了很多 C++。 :)
      • 如果有 cmets,投反对票会更有效。
      • 我没有投反对票,但现在我很想只为“很多”。 :P
      • @mmyers:噢!我只是浪费了很多时间来寻找“很多”这个词的答案。我想我也需要对我的 cmets 进行拼写检查。 :)
      【解决方案5】:
        public static byte firstDigit(int number) {
          while (true) {
            int temp = number / 10;
      
            if (temp == 0) {
              return (byte) Math.abs(number);
            }
      
            number = temp;
          }
      

      【讨论】:

        【解决方案6】:

        (int)(a / 10 ** (int)Math.log10(a))

        可能比字符串解决方案效率低,但没有循环,它使我们保持在“数字”领域。

        (永远记住,当您谈论数字中的位数时,log10 是您的朋友)

        也不适用于负数 - 取第一个的绝对值。

        【讨论】:

          【解决方案7】:

          对于整数,int n1 和 int n2;

          return ("" + n1).charAt(0) == ("" + n2).charAt(0);
          

          【讨论】:

          • 可能是这样,但负数是怎么回事? ""+n1 是将 int n1 转换为字符串的方法之一,它可以工作。我认为downvote是针对错误或无用的答案。我的答案没有错。否决票可能会误导其他人“”+n1 根本不起作用。
          猜你喜欢
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 2017-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多