Java - Как отформатировать число в строку из 2 символов? - PullRequest
22 голосов
/ 06 ноября 2011

Как бы я отформатировал int между 0 и 99 в строку, состоящую из 2 символов. * Например 1003 *

4  becomes "04"
36 becomes "36"

Заранее спасибо.

Ответы [ 3 ]

48 голосов
/ 06 ноября 2011

Использование 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
    }
}

Редактировать:

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

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;

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

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

7 голосов
/ 06 ноября 2011

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

NumberFormat formatter = new DecimalFormat("00");
String s = formatter.format(4); 
3 голосов
/ 06 ноября 2011

Простой способ - добавить "" к целому числу (или к любому примитивному типу)

String str = "" + anyInetger;

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

String str;
if (anyInteger < 10)
{
    str = " 0" + anyInetger;
}
else
{
    str = "" + anyInetger;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...