Как я могу отслеживать Int и удерживать 0

1

Java-вопрос. Скажем, у меня есть число, такое как 0000102, и 0-они важны, так как они должны быть там.

Как сохранить эту информацию в int (или каким-либо другим способом, который позволил бы мне увеличить его)

Например, после проверки номера 0000102 он должен добавить один к нему и проверить на 0000103

Когда я пытаюсь сохранить его, как в int, он просто возвращается к 102 и избавляется от 0, и поэтому не совпадает с поиском через базу данных, так как он больше не то же самое. Кто-нибудь знает, как я могу это сделать без его удаления 0. благодаря

РЕДАКТИРОВАТЬ:

Моим окончательным решением для добавления с ведущими нулями была эта функция, она берет строку с ведущим 0, добавляет один к ней, а затем возвращает строку

String nextNum(String s){
    int number =0;
    String newNum =""; 
    int len = s.length();
    int newLength =0;
    for(int i =0; i < s.length()-1; i++){
      if (s.charAt(i) == '0')
        newNum+="0";
        else 
        break;      
    }
     number = Integer.parseInt(s);
     number++;
     newNum +=  String.valueOf(number);
     newLength = newNum.length();
     if(newLength == len)
    return newNum;
     else
    return newNum.substring(1); //incase number was 000099 it doesnt go to   0000100 it goes to   000100 instead 
  }
  • 0
    Как вы получаете вход? как строка?
  • 0
    Я могу получить это любым способом, в идеале, как строка, прочитанная из текстового файла. Но при необходимости это может быть жестко запрограммировано в программе как любой тип
Теги:

5 ответов

5
Лучший ответ

Вы можете использовать форматирование строк, комбинируя printf с "%0d" следующим образом:

    String num = "000123";
    Integer n = Integer.parseInt(num);
    n++;
    int len = num.length();
    System.out.printf("%0" + len + "d", n); //  000124

    // and if you want to store the result
    // back into a string:
    String res = String.format("%0" + len + "d", n);
    System.out.println(res); // 000124
  • 0
    Таким образом, вместо того, чтобы распечатать его (так как это не то, что делает программа). может ли он сохранить его обратно в строку после обновления? И будет ли это так же просто, как num = ("% 0" + len + "d", n); Или это не сработает. Поскольку номер необходимо сохранить после обновления, а не распечатывать.
  • 0
    @Lain да, вы можете сделать это с помощью String.format() - я обновил ответ.
Показать ещё 2 комментария
1

Вы сохранили бы значение как int (без нулей), но могли бы преобразовать его в String с ведущими нулями, когда вы хотите распечатать или отобразить его. Вот пример метода преобразования.

public String addZeroes(int value, int desiredLength) {
    String valueString = value + "";
    int valueLength = valueString.length();

    for (int i = 0; i < desiredLength - valueLength; i++) {
        valueString = "0" + valueString;
    }

    return valueString;
}
  • 0
    Есть лучшие способы добавить ведущие нули, такие как String.format или DecimalFormat .
1

Само число отдельно от представления числа. Число, связанное с тем, что мы обычно называем "десять", всегда является количеством, которое считает их: ||||||||||, но оно имеет много возможных строковых представлений: "10", "0000010", "0x0a", "1010 (2)"... (не все из них являются действительными представлениями Java, просто различными представлениями, которые используют люди)

Ваш номер всегда будет храниться на компьютере таким образом, чтобы количество (в основном) можно было точно обрабатывать. Строковое представление обычно не сохраняется; он рассчитывается каждый раз. Например, когда вы выполняете System.out.println(102), он фактически обрабатывается как System.out.println(Integer.toString(102, 10)).

Между 102 и "0000102", цифрой, которую вы хотите сохранить, и которую вы хотите отобразить, и соответствующим образом конвертировать, когда вам нужен другой.

  • 2
    Не совсем, 0000102 == 66 (он анализируется как восьмеричный, когда появляется в исходном коде )
  • 0
    @immibis: Ах, хорошая мысль :)
0

Вы говорите, что вам нужно следить за ведущими нулями, но это отдельно от самого номера. Я бы сохранил номер как int и сохранил переменную с требуемым количеством нулей. Это позволит номеру сохранить семантическое значение числа как числа (и разрешить приращение, как вы сказали), и при его отображении, заполнить или заполнить нулями, когда это необходимо, на основе второго значения.

0

Вам понадобится использовать String.

Десятичные числа 000102 и 0102 и 102 (и, если на то пошло, шестнадцатеричный номер 0x66) являются одинаковым целочисленным значением, невозможно отличить их после их хранения в виде int.

Если вы хотите сохранить конкретное представление вашего целого числа, вам понадобится строка.

Чтобы увеличить строку, вам нужно проанализировать ее на целое, а затем переформатировать.

String increment(String s) {
  int n = Integer.parseInt(s, 10)
  return ("%0" + s.length() + "d").format(n+1); 
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню