检查整数以查看它是否包含零

时间:2010-10-02 20:49:25

标签: java parsing integer

给定一个整数,你如何使用Java来检查它是否包含0?

1 = Good
2 = Good
...
9 = Good
10 = BAD!
101 = BAD!
1026 = BAD!
1111 = Good

如何做到这一点?

7 个答案:

答案 0 :(得分:37)

你的意思是十进制表示是否包含0?绝对最简单的方式是:

if (String.valueOf(x).contains("0"))

不要忘记一个数字本身并不“包含0”(当然除了零) - 它取决于基数。因此十进制中的“10”是十六进制中的“A”,十六进制中的“10”是十进制中的“16”......在这两种情况下结果都会改变。

可能有更有效的方法来测试整数的十进制表示中是否存在零,但它们可能比上面的表达式更加复杂。

答案 1 :(得分:22)

如果由于某种原因您不喜欢转换为String的解决方案,您可以尝试:

boolean containsZero(int num) {
    if(num == 0)
        return true;

    if(num < 0)
        num = -num;

    while(num > 0) {
        if(num % 10 == 0)
            return true;
        num /= 10;
    }
    return false;
}

这也假设num是基数10。

编辑:添加处理负数的条件和0本身。

答案 2 :(得分:2)

您可以将其转换为字符串并检查它是否包含字符“0”。

int number = 101;
if( ( "" + number ).contains( "0" ) ) {
  System.out.println( "contains the digit 0" );
}

答案 3 :(得分:1)

Integer.toString(yourIntValue).contains("0");

答案 4 :(得分:1)

这是一个在整数中检测零的例程。要使其适用于任何表示(十进制,十六进制,八进制,二进制),您需要将基数作为参数传入。

public static boolean hasZero(int num, int base) {
    assert base > 0 : "must have positive non-zero base";

    if (num == 0)
        return true;

    while(num != 0) {
        if (num % base == 0) {
            return true;
        }
        else {
            num = num / base;
        }
    }

    return false;
}

public static void main(String args[]) {
    System.out.println(hasZero(10, 10));  // true (base 10 int)
    System.out.println(hasZero(-12, 10));  // false (base 10 int)

    System.out.println(hasZero(0x10, 16)); // true (hex is base 16)
    System.out.println(hasZero(0x1A, 16)); // false (hex is base 16)
}

答案 5 :(得分:1)

我不知道这是否更容易,但这是另一种方式。 将数字拆分为整数数组。然后排序并检查第一个元素是否为零。 E.g

int n = 14501;
// after splitting
int na = {1, 4, 5, 0, 1};
// after sorting
int na = {0, 1, 1, 4, 5};

答案 6 :(得分:0)

不使用Java,但从C ++转换并不是很难 PS。对使用字符串转换的任何人感到羞耻。

bool Contains0InBase10( unsigned int i, unsigned int& next )
{
 unsigned int divisor = 10;
 unsigned int remainder = 0;
 while( divisor <= i )
 {
  unsigned int newRemainder = i%divisor;
  if( newRemainder - remainder == 0)
  {
   // give back information allowing a program to skip closer to the next
   // number that doesn't contain 0
   next = i + (divisor / 10) - remainder;
   return true;
  }
  divisor *= 10;
  remainder = newRemainder;
 }
 return false;
}