如何从整数中删除特定数字?

How to delete specific digit from integer?

n 整数中 n = 1237534 (例如)我必须删除数字 3 以便获得最大可能的值。 n也可以是负数。

我可以得到 127534123754

越大当然是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);

这会打印字符串而不是转换为整数,因为打印整数会导致转换为字符串。如果该数字未出现在原始编号中,则打印原始编号。您可以更改该处理以满足您的要求。