Java - How to format a number to a 2 char string?

风流意气都作罢 提交于 2019-12-21 06:50:23

问题


How would I format an int between 0 and 99 to a string which is 2 chars. E.g

4  becomes "04"
36 becomes "36"

Thanks in advance.


回答1:


Use String.format(). Example:

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's comment got me thinking, so I figured why not benchmark the three alternatives.

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);
            }

        }
    }

}

The output I got was:

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

Turns out - if I tested correctly - that SpeedBirdNine had the most efficient solution, albeit badly presented. So I revise my solution to:

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

In retrospect I think it makes sense, given that my initial solution incurred the cost of parsing the format string, and I'd assume Anthony's formatter also has some manner of data structure behind it being iterated every time.

And predictably a lot faster by keeping a String[] containing all the 100 strings, but that's probably overkill...




回答2:


You can do this using NumberFormat. E.g.,

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



回答3:


Simple way is to append "" to the integer (or any primitive type)

String str = "" + anyInetger;

You can use

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


来源:https://stackoverflow.com/questions/8023699/java-how-to-format-a-number-to-a-2-char-string

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!