Подтвердить что ты не робот

Java - Как отформатировать число до строки 2 char?

Как мне отформатировать int между 0 и 99 до строки, которая составляет 2 символа. Например

4  becomes "04"
36 becomes "36"

Спасибо заранее.

4b9b3361

Ответ 1

Используйте String.format(). Пример:

class Test{
    public static void main(String[]args){
        System.out.println(String.format("%02d", 42)); //42
        System.out.println(String.format("%02d",  7)); //07
    }
}

Edit:

luiscubal comment заставил меня думать, поэтому я подумал, почему бы не сравнить три альтернативы.

import java.text.*;

interface Fmt{
    public String f(int x);
}

class Test{

    static NumberFormat formatter = new DecimalFormat("00");

    static Fmt f1 = new Fmt(){
        public String f(int x){ return ((x<10)?"0":"") + x; }
        public String toString(){return "f1";}
    };

    static Fmt f2 = new Fmt(){
        public String f(int x){ return String.format("%02d", x); }
        public String toString(){return "f2";}
    };

    static Fmt f3 = new Fmt(){
        public String f(int x){ return formatter.format(x); }
        public String toString(){return "f3";}
    };

    public static void main(String[]args){

        Fmt[] fmts = new Fmt[]{f1, f2, f3, f3, f2, f1};

        for (int x : new int[]{7, 42, 99}){

            String s0 = null;
            for (Fmt fmt : fmts)
                if (s0==null)
                    s0 = fmt.f(x);
                else
                    if (!fmt.f(x).equals(s0))
                        System.exit(1);

            System.out.printf("%02d\n", x);

            for (Fmt fmt : fmts){
                String s = null;
                int count = 0;
                System.gc();
                long t0 = System.nanoTime();
                for (int i=0; i<100000; i++){
                    count += fmt.f(x).length();
                }
                long t1 = System.nanoTime();

                System.out.printf("    %s:%8.2fms, count=%d\n",
                    fmt, (t1-t0)/1000000.0, count);
            }

        }
    }

}

Выход, который я получил, был:

07
    f1:   11.28ms, count=200000
    f2:  195.97ms, count=200000
    f3:   45.41ms, count=200000
    f3:   39.67ms, count=200000
    f2:  164.46ms, count=200000
    f1:    6.58ms, count=200000
42
    f1:    5.25ms, count=200000
    f2:  163.87ms, count=200000
    f3:   42.78ms, count=200000
    f3:   42.45ms, count=200000
    f2:  163.87ms, count=200000
    f1:    5.15ms, count=200000
99
    f1:    5.83ms, count=200000
    f2:  168.59ms, count=200000
    f3:   42.86ms, count=200000
    f3:   42.96ms, count=200000
    f2:  165.48ms, count=200000
    f1:    5.22ms, count=200000

Оказывается - если бы я правильно тестировал, то SpeedBirdNine имел самое эффективное решение, хотя и плохо представлено. Поэтому я пересмотрю свое решение:

String answer = ((x<10)?"0":"") + x;

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

И, предсказуемо, намного быстрее, сохранив String[], содержащий все 100 строк, но это, вероятно, перебор...

Ответ 2

Вы можете сделать это, используя NumberFormat. Например,

NumberFormat formatter = new DecimalFormat("00");
String s = formatter.format(4); 

Ответ 3

Простым способом является добавление "" к целому (или любому примитивному типу)

String str = "" + anyInetger;

Вы можете использовать

String str;
if (anyInteger < 10)
{
    str = " 0" + anyInetger;
}
else
{
    str = "" + anyInetger;
}