Неправильно ли преобразовывать int в String только для доступа к его цифрам?

58
7

Я получаю привычку конвертировать int номера в String для доступа к своим цифрам. Например:

int number = 2899;
String number_str = String.valueOf(number);
StringBuffer reversedNumber = new StringBuffer();

for(int i = number_str.length()-1; i >= 0; i--)
{
reversedNumber.append(Character.getNumericValue(number_str.charAt(i)));
}

Я считаю, что есть еще один более распространенный способ доступа к цифрам, а именно, использование серии mod 10 и div 10. Я понимаю, что mod 10 даст n-th цифру, а div 10 даст 1 to (n-1)th цифре любого заданного числа с длиной n. Но я чувствую, что преобразование в String и доступ к его персонажам более удобны.

Один из примеров, когда я преобразовал int в String был на этот вопрос, который я задал в обзоре кода: https://codereview.stackexchange.com/questions/74441/stepping-number-solution-optimization

Я в основном хотел проверить, был ли номер номером шага. Например:

input: 8343545
output: 8343545 is a stepping number

Объяснение: 8343545 можно написать как 8 343 545. Def: число называется номером шага, если каждая смежная цифра, кроме разделенных запятыми, отличается на 1.

Есть много других int проблемы, которые я сделал ранее, и использовал String преобразование для доступа к цифрам числа. Я просто хочу знать, плохо ли это делать? Не могли бы вы объяснить, почему это плохо, а mod 10 или div 10 предпочтительнее?

спросил(а) 2014-12-28T23:18:00+03:00 5 лет, 10 месяцев назад
1
Решение
82

Это плохо?

Нет, это вообще не так. Я действительно предпочитаю это:

    Очень легко понятно людям. Сравните это с делением /mod10 - не многие начинающие это поймут. Вы кодируете людей. Это очень легко реализовать. Гораздо меньше шансов написать багги.

Тем не менее, ВСЕ хорошие библиотеки используют метод div10/mod10. Во- первых, потребители библиотек не знаю деталей, и они не особенно волновало. Во-вторых, он работает намного лучше, по производительности.

Существует очень хороший шанс, что ваш прецедент не требует сверхвысокой производительности. Если это так, вы точно знаете, что нужно сделать.

ответил(а) 2014-12-28T23:48:00+03:00 5 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема