繁体   English   中英

java - 如何知道一个数字是否包含在另一个数字中?

[英]How can I know if a number is contained in another in java?

java - 如何在不转换为字符串的情况下知道一个数字是否包含在java中的另一个数字中? 例如,如果我输入 123456 和 234,我应该打印 true,但是如果我输入 678 和 34,它应该打印 false。

查找a包含b的算法如下:

  1. 找到最接近b的 10 p的幂, a使用模运算查看b的最后一位数字。
  2. a >= b ,检查a % pa的余数是否等于b 如果不是,将a除以 10(十进制右移):
static boolean aContainsB(int a, int b) {
    a = Math.abs(a);
    b = Math.abs(b);
    int p = 1;
    while (p <= b) {
        p *= 10;
    }
    
    boolean contains = a == b;
    while (!contains && a >= b) {
        contains = a % p == b || a == b;
        a /= 10;
    }
    return contains;
}

测试和输出:

int[][] tests = {
    {234, 234}, {123, 234}, {123, 23}, {1234, 23}, {12345, 12},
    {325, 1}, {210, 1}, {123, 1}, {211, 1}, {210, 10},
    {91019, 10}
};

for (int[] t : tests) {
    System.out.printf("%d contains %d ? %s%n", t[0], t[1], aContainsB(t[0], t[1]));
}

输出

234 contains 234 ? true
123 contains 234 ? false
123 contains 23 ? true
1234 contains 23 ? true
12345 contains 12 ? true
325 contains 1 ? false
210 contains 1 ? true
123 contains 1 ? true
211 contains 1 ? true
210 contains 10 ? true
91019 contains 10 ? true

如果您是受虐狂,您可以将您的数字字符串放入List / Table (使用for循环将一个数字转换为一个索引单元格)并像String对象一样实现contains()方法。
但是更好更简单的方法是将int转换为String并使用 String 的 `contains()'。

int a = 123456;
boolean contains = String.valueOf(a).contains("234");

为什么你不想转换为String

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM