我如何知道 java 中是否包含另一个数字?
How can I know if a number is contained in another in java?
如何在不转换为字符串的情况下知道 java 中是否包含另一个数字?例如,如果我输入 123456 和 234,我应该打印 true,但是如果我输入 678 和 34,它应该打印 false。
如果你是受虐狂,你可以将你的数字字符串放入 List
/Table
(使用 for
循环从一个数字到一个索引单元格)并执行 contains()
方法类似于 String
个对象。
但更好更简单的方法是将 int
转换为 String
并使用 String 的 `contains()'.
int a = 123456;
boolean contains = String.valueOf(a).contains("234");
您为什么不想转换为 String
?
查找 a
是否包含 b
的算法如下:
- 使用模运算求出最接近
b
的 10 p
的幂,以查看 a
的最后一位数。
- 同时
a >= b
,检查a % p
或a
的余数是否等于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
如何在不转换为字符串的情况下知道 java 中是否包含另一个数字?例如,如果我输入 123456 和 234,我应该打印 true,但是如果我输入 678 和 34,它应该打印 false。
如果你是受虐狂,你可以将你的数字字符串放入 List
/Table
(使用 for
循环从一个数字到一个索引单元格)并执行 contains()
方法类似于 String
个对象。
但更好更简单的方法是将 int
转换为 String
并使用 String 的 `contains()'.
int a = 123456;
boolean contains = String.valueOf(a).contains("234");
您为什么不想转换为 String
?
查找 a
是否包含 b
的算法如下:
- 使用模运算求出最接近
b
的 10p
的幂,以查看a
的最后一位数。 - 同时
a >= b
,检查a % p
或a
的余数是否等于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