Как удалить конкретную цифру из целого числа?

#java #arrays #integer

Вопрос:

В n целом числе, где n = 1237534 (например) Я должен удалить цифру 3 , чтобы получить максимально возможное значение. n также может быть отрицательным числом.

Я могу получить 127534 или 123754 .

Конечно , больше 127534 , но как я могу его вернуть?

Я пробовал что-то подобное:

 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 неправильный ответ. У кого-нибудь, может быть, есть идея, как ее решить?

Комментарии:

1. charAt() вернет первое вхождение 3. Вы можете использовать подстроку, чтобы удалить ее. String result = str.substring(0, index) str.substring(index 1); Нет необходимости в петлях. Я даже не уверен, что они делают.

Ответ №1:

Для этого не требуются массивы или циклы:

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

Ответ №2:

Вот альтернативный подход, который также проверяет, действительно ли число содержит цифру. В противном случае может возникнуть исключение, если индекс возвращает -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);
 

Это печатает строку, а не преобразует ее в целое число, так как печать целого числа в любом случае приводит к преобразованию в строку. Если цифра не указана в исходном номере, то печатается оригинал. Вы можете изменить эту обработку в соответствии с вашими требованиями.

Ответ №3:

Как насчет этого:

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

В принципе, нам нужно удалить последнее вхождение удаляемой цифры (the bad_digit ). Поэтому мы преобразуем число в строку и переворачиваем его. Теперь нам нужно удалить первое вхождение цифры. Поэтому мы перебираем символы, и когда мы находим эту цифру, мы удаляем ее из строки и выходим из цикла. Теперь мы снова перевернем строку, и результат будет таким, как вы хотите.