Ответ 1
String.format(http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax)
В вашем случае это будет:
String formatted = String.format("%03d", num);
- 0 - для заполнения нулями
- 3 - установить ширину до 3
Есть ли лучший способ получить этот результат? Эта функция не работает, если num имеет больше цифр, чем цифр, и я чувствую, что она должна быть в библиотеке где-то (например, Integer.toString(x, "% 3d" ) или что-то в этом роде)
static String intToString(int num, int digits) {
StringBuffer s = new StringBuffer(digits);
int zeroes = digits - (int) (Math.log(num) / Math.log(10)) - 1;
for (int i = 0; i < zeroes; i++) {
s.append(0);
}
return s.append(num).toString();
}
String.format(http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax)
В вашем случае это будет:
String formatted = String.format("%03d", num);
С помощью Java 1.5 вы можете использовать метод String.format
. Например, чтобы сделать то же, что и ваш пример:
String format = String.format("%%0%dd", digits);
String result = String.format(format, num);
return result;
В этом случае вы создаете строку формата, используя ширину, указанную в цифрах, а затем применяете ее непосредственно к числу. Формат для этого примера преобразуется следующим образом:
%% --> %
0 --> 0
%d --> <value of digits>
d --> d
Итак, если цифры равны 5, строка формата становится %05d
, которая задает целое число с шириной 5 печатных ведущих нулей. См. java docs для String.format
для получения дополнительной информации о спецификациях преобразования.
Другой вариант - использовать DecimalFormat для форматирования вашей числовой строки. Вот еще один способ сделать работу без использования String.format, если вы застряли в мире до 1.5:
static String intToString(int num, int digits) {
assert digits > 0 : "Invalid number of digits";
// create variable length array of zeros
char[] zeros = new char[digits];
Arrays.fill(zeros, '0');
// format number as String
DecimalFormat df = new DecimalFormat(String.valueOf(zeros));
return df.format(num);
}
Как насчет просто:
public static String intToString(int num, int digits) {
String output = Integer.toString(num);
while (output.length() < digits) output = "0" + output;
return output;
}
Если ваша версия jdk меньше 1,5, можно использовать следующую опцию.
int iTest = 2;
StringBuffer sTest = new StringBuffer("000000"); //if the string size is 6
sTest.append(String.valueOf(iTest));
System.out.println(sTest.substring(sTest.length()-6, sTest.length()));