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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3847479/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 05:47:41  来源:igfitidea点击:

checking an integer to see if it contains a zero

javaparsinginteger

提问by Bobby S

Given an integer, how could you check if it contains a 0, using Java?

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

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

How can this be done?

如何才能做到这一点?

采纳答案by Jon Skeet

Do you mean if the decimal representation contains a 0? The absolute simplestway of doing that is:

您的意思是十进制表示中是否包含 0?绝对最简单的这样做的方法是:

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

Don't forget that a number doesn't "inherently" contain a 0 or not (except for zero itself, of course) - it depends on the base. So "10" in decimal is "A" in hex, and "10" in hex is "16" in decimal... in both cases the result would change.

不要忘记,一个数字并不“固有地”包含 0 或不包含(当然,零本身除外)——这取决于基数。所以十进制的“10”是十六进制的“A”,十六进制的“10”是十进制的“16”......在这两种情况下,结果都会改变。

There may be more efficient ways of testing for the presence of a zero in the decimal representation of an integer, but they're likely to be considerably more involved that the expression above.

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

回答by tangens

You can convert it to a string and check if it contains the char "0".

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

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

回答by amra

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

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

回答by Bill the Lizard

If for some reason you don't like the solution that converts to a String you can try:

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

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;
}

This is also assuming numis base 10.

这也假设num是基数 10。

Edit: added conditions to deal with negative numbers and 0 itself.

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

回答by m-sharp

Here is a routine that will work detect zeros in integers. To make it work with any representation (decimal, hex, octal, binary), you need to pass in the base as a parameter.

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

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)
}

回答by fastcodejava

I don't know if this is easier but here is another way. Split the number into an array of ints. Then sort and check if the first element is zero. E.g

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

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

回答by Dan

Not using Java, but it's not exactly hard to convert from C++ PS. Shame on anyone using string conversion.

不使用 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;
}