如何从整数中删除特定数字?
How to delete specific digit from integer?
在 n
整数中 n = 1237534
(例如)我必须删除数字 3
以便获得最大可能的值。 n
也可以是负数。
我可以得到 127534
或 123754
。
越大当然是127534
,可是我怎么能return呢?
我试过这样的事情:
int n = 1237534;
String newNum = String.valueOf(n);
int[] newGuess = new int[newNum.length()];
for (int i = 0; i < newNum.length(); i++) {
newGuess[i] = newNum.charAt(i) - '0';
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < newGuess.length; i++) {
if (!(newGuess[i] % 3 == 0)) {
sb.append(newGuess[i]);
}
}
System.out.println(sb);
我得到 12754
这不是正确答案。有人可能知道如何解决它吗?
这个怎么样:
int n = 123454321;
int bad_digit = 3;
StringBuilder s = new StringBuilder(n + "");
s.reverse();
System.out.println("Reversed String: " + s);
for (int i = 0; i < s.length(); i++) {
// Check if the character at index 'i' and the
// digit are equal, by converting both to strings
if (("" + s.charAt(i)).equals("" + bad_digit)) {
s.replace(i, i + 1, "");
break;
}
}
System.out.println("Reversed String after removing the digit (if found): " + s);
s.reverse();
System.out.println("Greatest number without the bad digit: " + s);
基本上,我们需要删除最后一次出现的要删除的数字(bad_digit
)。因此,我们将数字转换为字符串并将其反转。现在我们需要删除数字的 first 出现。所以我们遍历字符,当我们找到那个数字时,我们将它从字符串中删除,然后退出循环。现在我们再次反转字符串,输出就是你想要的。
这不需要数组和循环:
int n = 1237534;
String newNum = String.valueOf(n);
char c = '3';
StringBuilder sb1 = new StringBuilder( newNum );
StringBuilder sb2 = new StringBuilder( newNum );
int newGuess1 = Integer.parseInt(sb1.deleteCharAt(newNum.indexOf(c)).toString());
int newGuess2 = Integer.parseInt(sb2.deleteCharAt(newNum.indexOf(c, newNum.indexOf(c)+1)).toString());
System.out.println( newGuess1 > newGuess2 ? newGuess1: newGuess2 );
这是另一种方法,它还可以检查以确保数字实际包含数字。否则,如果索引 returns -1.
可能会抛出异常
该方法只是根据数字是否为负数删除第一个或最后一个出现的数字。
int n = 1234321;
int bad_digit = 3;
StringBuilder sb = new StringBuilder(Integer.toString(n));
String bad = Integer.toString(bad_digit);
int idxOfFirst = sb.indexOf(bad);
// first, make certain the number contains the digit.
if (idxOfFirst >= 0) {
if (sb.charAt(0) == '-') {
// if negative, delete last character to give the larger value
sb.deleteCharAt(sb.lastIndexOf(bad));
} else {
// else delete the first character to give the larger value
sb.deleteCharAt(idxOfFirst);
}
}
System.out.println(sb);
这会打印字符串而不是转换为整数,因为打印整数会导致转换为字符串。如果该数字未出现在原始编号中,则打印原始编号。您可以更改该处理以满足您的要求。
在 n
整数中 n = 1237534
(例如)我必须删除数字 3
以便获得最大可能的值。 n
也可以是负数。
我可以得到 127534
或 123754
。
越大当然是127534
,可是我怎么能return呢?
我试过这样的事情:
int n = 1237534;
String newNum = String.valueOf(n);
int[] newGuess = new int[newNum.length()];
for (int i = 0; i < newNum.length(); i++) {
newGuess[i] = newNum.charAt(i) - '0';
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < newGuess.length; i++) {
if (!(newGuess[i] % 3 == 0)) {
sb.append(newGuess[i]);
}
}
System.out.println(sb);
我得到 12754
这不是正确答案。有人可能知道如何解决它吗?
这个怎么样:
int n = 123454321;
int bad_digit = 3;
StringBuilder s = new StringBuilder(n + "");
s.reverse();
System.out.println("Reversed String: " + s);
for (int i = 0; i < s.length(); i++) {
// Check if the character at index 'i' and the
// digit are equal, by converting both to strings
if (("" + s.charAt(i)).equals("" + bad_digit)) {
s.replace(i, i + 1, "");
break;
}
}
System.out.println("Reversed String after removing the digit (if found): " + s);
s.reverse();
System.out.println("Greatest number without the bad digit: " + s);
基本上,我们需要删除最后一次出现的要删除的数字(bad_digit
)。因此,我们将数字转换为字符串并将其反转。现在我们需要删除数字的 first 出现。所以我们遍历字符,当我们找到那个数字时,我们将它从字符串中删除,然后退出循环。现在我们再次反转字符串,输出就是你想要的。
这不需要数组和循环:
int n = 1237534;
String newNum = String.valueOf(n);
char c = '3';
StringBuilder sb1 = new StringBuilder( newNum );
StringBuilder sb2 = new StringBuilder( newNum );
int newGuess1 = Integer.parseInt(sb1.deleteCharAt(newNum.indexOf(c)).toString());
int newGuess2 = Integer.parseInt(sb2.deleteCharAt(newNum.indexOf(c, newNum.indexOf(c)+1)).toString());
System.out.println( newGuess1 > newGuess2 ? newGuess1: newGuess2 );
这是另一种方法,它还可以检查以确保数字实际包含数字。否则,如果索引 returns -1.
可能会抛出异常该方法只是根据数字是否为负数删除第一个或最后一个出现的数字。
int n = 1234321;
int bad_digit = 3;
StringBuilder sb = new StringBuilder(Integer.toString(n));
String bad = Integer.toString(bad_digit);
int idxOfFirst = sb.indexOf(bad);
// first, make certain the number contains the digit.
if (idxOfFirst >= 0) {
if (sb.charAt(0) == '-') {
// if negative, delete last character to give the larger value
sb.deleteCharAt(sb.lastIndexOf(bad));
} else {
// else delete the first character to give the larger value
sb.deleteCharAt(idxOfFirst);
}
}
System.out.println(sb);
这会打印字符串而不是转换为整数,因为打印整数会导致转换为字符串。如果该数字未出现在原始编号中,则打印原始编号。您可以更改该处理以满足您的要求。