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
}
Вы можете использовать форматирование строк, комбинируя 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
String.format()
- я обновил ответ.
Вы сохранили бы значение как 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;
}
String.format
или DecimalFormat
.
Само число отдельно от представления числа. Число, связанное с тем, что мы обычно называем "десять", всегда является количеством, которое считает их: ||||||||||, но оно имеет много возможных строковых представлений: "10", "0000010", "0x0a", "1010 (2)"... (не все из них являются действительными представлениями Java, просто различными представлениями, которые используют люди)
Ваш номер всегда будет храниться на компьютере таким образом, чтобы количество (в основном) можно было точно обрабатывать. Строковое представление обычно не сохраняется; он рассчитывается каждый раз. Например, когда вы выполняете System.out.println(102)
, он фактически обрабатывается как System.out.println(Integer.toString(102, 10))
.
Между 102
и "0000102"
, цифрой, которую вы хотите сохранить, и которую вы хотите отобразить, и соответствующим образом конвертировать, когда вам нужен другой.
Вы говорите, что вам нужно следить за ведущими нулями, но это отдельно от самого номера. Я бы сохранил номер как int
и сохранил переменную с требуемым количеством нулей. Это позволит номеру сохранить семантическое значение числа как числа (и разрешить приращение, как вы сказали), и при его отображении, заполнить или заполнить нулями, когда это необходимо, на основе второго значения.
Вам понадобится использовать String
.
Десятичные числа 000102
и 0102
и 102
(и, если на то пошло, шестнадцатеричный номер 0x66
) являются одинаковым целочисленным значением, невозможно отличить их после их хранения в виде int
.
Если вы хотите сохранить конкретное представление вашего целого числа, вам понадобится строка.
Чтобы увеличить строку, вам нужно проанализировать ее на целое, а затем переформатировать.
String increment(String s) {
int n = Integer.parseInt(s, 10)
return ("%0" + s.length() + "d").format(n+1);
}