java格式化输出(3)

转载自:http://www.chinaunix.net/jh/26/134984.html

 

a.格式描述符:

1. L或l - 使数字左对齐(缺省是右对齐)
2. C或c - 使数字居中对齐(缺省是右对齐)
3. X或x - 显示数字为十六进制(缺省是十进制)
4. B或b - 显示数字为八进制(缺省是十进制)
5. ,(半角逗号)- 千位分隔符
6. S或s - 显示数字为科学记数法
7. Z或z - 用零填空位(缺省是空格)
8. w.d (两个整数用半角句号隔开)- 指定输出域宽及精度

b. "fillChar"是填空位符(缺省为空格)
--你可以用MyOut.fillChar = '*'或'$'来定义你自己的空位符


举例:
println(123.45678, "8.3L") ->; 123.457(左对齐占八位)
println(123.45678, "10.3cs") ->;  1.235E2 (居中占十位)
println(1234567, ",10") ->;   1,234,567(右对齐占十位)


// class MyOut

    

import java.io.PrintStream;

import java.io.PrintWriter;

import java.io.OutputStreamWriter;

import java.text.DecimalFormat;

import java.text.NumberFormat;



/* Thanks to Prof. H.Roumani.(He is my java teacher, who is great.)

 * 

 * The format methods receive the value to be formatted (which can 

 * be of any type) and a format descriptor: a string that contains 

 * one or more of the following flags in any order and in any case: 

 *

 * L:

 *   By default, all values are aligned right within their field 

 *   width. If this flag is specified, left alignment is used instead.

 *   This flag has no effect if the field width is not specified. 

 * C:

 *   By default, all values are aligned right within their field 

 *   width. If this flag is specified, centre alignment is used instead.

 *   This flag has no effect if the field width is not specified. 

 * X:

 *   By default, all numeric values are shown in the decimal system. 

 *   If this flag is specified, hexadecimal is used instead (showing 

 *   IEEE-754 for real's). This flag has no effect if the value is not 

 *   numeric. 

 * B:

 *   By default, all numeric values are shown in the decimal system. 

 *   If this flag is specified, binary is used instead (showing 

 *   IEEE-754 for real's). This flag has no effect if the value is not 

 *   numeric. 

 * ,:

 *   By default, all numeric, base-10 values are shown without a 

 *   thousand-separator. If this flag is specified, a comma is inserted

 *   in the integer part of the number to separate thousands. This flag 

 *   has no effect if the value is not numeric, is not in decimal, or if 

 *   the scientific notation is used. 

 * S:

 *   By default, all numeric, base-10 values are shown as an integer part

 *   followed by a mantissa, or fractional part. If this flag is specified,

 *   scientific notation is used: One digits (possibly preceded by a minus 

 *   sign) followed by a decimal point, a mantissa, the letter 'E' and an 

 *   exponent. This flag has no effect if the value is not numeric or is not

 *   in decimal. 

 * Z:

 *   By default, all integer, base-10 values are shown with leading or 

 *   trailing spaces to fill the specified field width. If this flag is 

 *   specified, the field is filled with leading zeros instead. This flag is 

 *   only meaningful if the value is a base-10 integer, the width is specified,

 *   and the thousand-separator flag is not specified. 

 * w.d (two integers separated by a period):

 *   w is the desired width of the entire returned string, after formatting. 

 *   If the formatted string is shorter than w, it will be padded by leading 

 *   and/or trailing spaces (or some other fill character) depending on the 

 *   requested alignment (left, right, or centre). d is the desired number of 

 *   decimals and is meaningful only if the value is a base-10 real (in standard

 *   or scientific notation). Rounding to the specified number of decimals is 

 *   done using conventional rules but the case of 5 is handled by rounding to 

 *   the nearest even number (same as the rint method of the Math class). Note 

 *   that you can specify only w (in that case don't include the period), or 

 *   only d (in this last case do precede it by the period). 

 */



public class MyOut

{

    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/

    public static String format(byte value, String fd)

    {

        return formatInteger(value, fd, 8);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(char value, String fd)

    {

        return formatInteger(value, fd, 16);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(double value, String fd)

    {

        extractAttributes(fd);

        String s1;

        if(base == 'B')

        {

            s1 = Long.toBinaryString(Double.doubleToLongBits(value));

            s1 = repeat(64, '0') + s1;

            s1 = s1.substring(s1.length() - 64);

        } else if(base == 'X')

        {

            s1 = Long.toHexString(Double.doubleToLongBits(value));

            s1 = repeat(16, '0') + s1;

            s1 = s1.substring(s1.length() - 16);

        } else

        {

            pattern = decimals != -1 ? "." + repeat(decimals, '0') : ".#";

            if(scientific)

                pattern = "0" + pattern + "E0";

            else

                pattern = separator ? "#,##0" + pattern : "0" + pattern;

            s1 = (new DecimalFormat(pattern)).format(value);

        }

        return size(s1);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(float value, String fd)

    {

        extractAttributes(fd);

        String s1;

        if(base == 'B')

        {

            s1 = Integer.toBinaryString(Float.floatToIntBits(value));

            s1 = repeat(32, '0') + s1;

            s1 = s1.substring(s1.length() - 32);

        } else if(base == 'X')

        {

            s1 = Integer.toHexString(Float.floatToIntBits(value));

            s1 = repeat(8, '0') + s1;

            s1 = s1.substring(s1.length() - 8);

        } else

        {

            pattern = decimals != -1 ? "." + repeat(decimals, '0') : ".#";

            if(scientific)

                pattern = "0" + pattern + "E0";

            else

                pattern = separator ? "#,##0" + pattern : "0" + pattern;

            s1 = (new DecimalFormat(pattern)).format(value);

        }

        return size(s1);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(int value, String fd)

    {

        return formatInteger(value, fd, 32);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(long value, String fd)

    {

        return formatInteger(value, fd, 64);

    }

    

    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(short value, String fd)

    {

        return formatInteger(value, fd, 16);

    }

    

    /* Formats the passed value using the passed format descriptor

     * and returns the result as a string.

     */

    private static String formatInteger(long l, String s, int i)

    {

        extractAttributes(s);

        String s1;

        if(base == 'B')

        {

            s1 = Long.toBinaryString(l);

            s1 = repeat(64, '0') + s1;

            s1 = s1.substring(s1.length() - i);

        } else

        if(base == 'X')

        {

            s1 = Long.toHexString(l);

            s1 = repeat(16, '0') + s1;

            s1 = s1.substring(s1.length() - i / 4);

        } else

        if(separator)

        {

            s1 = (new DecimalFormat("#,###")).format(l);

        } else

        {

            s1 = String.valueOf(l);

            if(zeroFill)

                s1 = repeat(width - s1.length(), '0') + s1;

        }

        return size(s1);

    }



    // Gets information from the passed format descriptor.

    private static void extractAttributes(String s)

    {

        s = s.toUpperCase();

        alignment = 'R';

        separator = false;

        base = 'D';

        scientific = false;

        zeroFill = false;

        width = -1;

        decimals = -1;

        int i = s.indexOf(76, 0);

        if(i >; -1)

        {

            alignment = 'L';

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(67, 0);

        if(i >; -1)

        {

            alignment = 'C';

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(44, 0);

        if(i >; -1)

        {

            separator = true;

            pattern = pattern + ",###";

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(88, 0);

        if(i >; -1)

        {

            base = 'X';

            s = s.substring(0, i) + s.substring(i + 1);

        } else

        {

            i = s.indexOf(66, 0);

            if(i >; -1)

            {

                base = 'B';

                s = s.substring(0, i) + s.substring(i + 1);

            }

        }

        i = s.indexOf(83, 0);

        if(i >; -1)

        {

            scientific = true;

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(90, 0);

        if(i >; -1)

        {

            zeroFill = true;

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(46, 0);

        if(i >; -1)

        {

            decimals = Integer.parseInt(s.substring(i + 1));

            s = s.substring(0, i);

        }

        if(s.length() >; 0)

            width = Integer.parseInt(s);

    }

        

    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/    

    public static void print(byte value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(char value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(double value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(float value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(int value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(long value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }

    

    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(short value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }

    

    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(byte value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(char value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(double value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(float value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(int value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(long value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(short value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }

   

    // Returns the string padding with 'fillChar'.    

    private static String size(String s)

    {

        int i = width - s.length();

        if(alignment == 'R')

            return repeat(i, fillChar) + s;

        if(alignment == 'L')

            return s + repeat(i, fillChar);

        else

            return repeat(i / 2, fillChar) + s + repeat(i / 2 + i % 2, fillChar);

    }    

    

    // Repeats the passed character 'times' times.

    public static String repeat(int times, char c)

    {

        String s = "";

        for(int i = 0; i < times; i++)

            s = s + c;



        return s;

    }

    

    private static final String EOL = System.getProperty("line.separator");

    private static PrintWriter handle = new PrintWriter(new OutputStreamWriter(System.out));

    public static char fillChar = ' ';

    private static char alignment;

    private static boolean separator;

    private static char base;

    private static boolean scientific;

    private static boolean zeroFill;

    private static int width;

    private static int decimals;

    private static String pattern;    

}



// class MyOutTester

// Test the format of numbers in different ways.

public class MyOutTester

{

   public static void main(String[] args)

   {

      int i = 230;

      double d = 114.495678905;

      

      // Unformatted

      System.out.print(i + " ");

      System.out.println(d);

      

      // Some formatting

      MyOut.print(i, "11");

      MyOut.println(d, "14.3");

      

      // More formatting

      MyOut.print(i, "11L");

      MyOut.println(d, ",14.7");  

      

      // Scientific

      MyOut.print(i, ",11");

      MyOut.println(d, ",14.6s"); 

      

      // Hexdecimal

      MyOut.print(i, "x11");

      MyOut.println(d, "x21");

      

      // Changed fillChar

      MyOut.fillChar = '*';

      MyOut.print(i, "11");

      MyOut.println(d, "14.3");

      

      // Special case

      MyOut.println(d, "");

   }

}              
a.格式描述符: 

1. L或l - 使数字左对齐(缺省是右对齐) 
2. C或c - 使数字居中对齐(缺省是右对齐) 
3. X或x - 显示数字为十六进制(缺省是十进制) 
4. B或b - 显示数字为八进制(缺省是十进制) 
5. ,(半角逗号)- 千位分隔符 
6. S或s - 显示数字为科学记数法 
7. Z或z - 用零填空位(缺省是空格) 
8. w.d (两个整数用半角句号隔开)- 指定输出域宽及精度 

b. "fillChar"是填空位符(缺省为空格) 
--你可以用MyOut.fillChar = '*'或'$'来定义你自己的空位符 


举例: 
println(123.45678, "8.3L") ->; 123.457(左对齐占八位) 
println(123.45678, "10.3cs") ->;  1.235E2 (居中占十位) 
println(1234567, ",10") ->;   1,234,567(右对齐占十位) 


// class MyOut 

    
import java.io.PrintStream;

import java.io.PrintWriter;

import java.io.OutputStreamWriter;

import java.text.DecimalFormat;

import java.text.NumberFormat;



/* Thanks to Prof. H.Roumani.(He is my java teacher, who is great.)

 * 

 * The format methods receive the value to be formatted (which can 

 * be of any type) and a format descriptor: a string that contains 

 * one or more of the following flags in any order and in any case: 

 *

 * L:

 *   By default, all values are aligned right within their field 

 *   width. If this flag is specified, left alignment is used instead.

 *   This flag has no effect if the field width is not specified. 

 * C:

 *   By default, all values are aligned right within their field 

 *   width. If this flag is specified, centre alignment is used instead.

 *   This flag has no effect if the field width is not specified. 

 * X:

 *   By default, all numeric values are shown in the decimal system. 

 *   If this flag is specified, hexadecimal is used instead (showing 

 *   IEEE-754 for real's). This flag has no effect if the value is not 

 *   numeric. 

 * B:

 *   By default, all numeric values are shown in the decimal system. 

 *   If this flag is specified, binary is used instead (showing 

 *   IEEE-754 for real's). This flag has no effect if the value is not 

 *   numeric. 

 * ,:

 *   By default, all numeric, base-10 values are shown without a 

 *   thousand-separator. If this flag is specified, a comma is inserted

 *   in the integer part of the number to separate thousands. This flag 

 *   has no effect if the value is not numeric, is not in decimal, or if 

 *   the scientific notation is used. 

 * S:

 *   By default, all numeric, base-10 values are shown as an integer part

 *   followed by a mantissa, or fractional part. If this flag is specified,

 *   scientific notation is used: One digits (possibly preceded by a minus 

 *   sign) followed by a decimal point, a mantissa, the letter 'E' and an 

 *   exponent. This flag has no effect if the value is not numeric or is not

 *   in decimal. 

 * Z:

 *   By default, all integer, base-10 values are shown with leading or 

 *   trailing spaces to fill the specified field width. If this flag is 

 *   specified, the field is filled with leading zeros instead. This flag is 

 *   only meaningful if the value is a base-10 integer, the width is specified,

 *   and the thousand-separator flag is not specified. 

 * w.d (two integers separated by a period):

 *   w is the desired width of the entire returned string, after formatting. 

 *   If the formatted string is shorter than w, it will be padded by leading 

 *   and/or trailing spaces (or some other fill character) depending on the 

 *   requested alignment (left, right, or centre). d is the desired number of 

 *   decimals and is meaningful only if the value is a base-10 real (in standard

 *   or scientific notation). Rounding to the specified number of decimals is 

 *   done using conventional rules but the case of 5 is handled by rounding to 

 *   the nearest even number (same as the rint method of the Math class). Note 

 *   that you can specify only w (in that case don't include the period), or 

 *   only d (in this last case do precede it by the period). 

 */



public class MyOut

{

    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/

    public static String format(byte value, String fd)

    {

        return formatInteger(value, fd, 8);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(char value, String fd)

    {

        return formatInteger(value, fd, 16);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(double value, String fd)

    {

        extractAttributes(fd);

        String s1;

        if(base == 'B')

        {

            s1 = Long.toBinaryString(Double.doubleToLongBits(value));

            s1 = repeat(64, '0') + s1;

            s1 = s1.substring(s1.length() - 64);

        } else if(base == 'X')

        {

            s1 = Long.toHexString(Double.doubleToLongBits(value));

            s1 = repeat(16, '0') + s1;

            s1 = s1.substring(s1.length() - 16);

        } else

        {

            pattern = decimals != -1 ? "." + repeat(decimals, '0') : ".#";

            if(scientific)

                pattern = "0" + pattern + "E0";

            else

                pattern = separator ? "#,##0" + pattern : "0" + pattern;

            s1 = (new DecimalFormat(pattern)).format(value);

        }

        return size(s1);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(float value, String fd)

    {

        extractAttributes(fd);

        String s1;

        if(base == 'B')

        {

            s1 = Integer.toBinaryString(Float.floatToIntBits(value));

            s1 = repeat(32, '0') + s1;

            s1 = s1.substring(s1.length() - 32);

        } else if(base == 'X')

        {

            s1 = Integer.toHexString(Float.floatToIntBits(value));

            s1 = repeat(8, '0') + s1;

            s1 = s1.substring(s1.length() - 8);

        } else

        {

            pattern = decimals != -1 ? "." + repeat(decimals, '0') : ".#";

            if(scientific)

                pattern = "0" + pattern + "E0";

            else

                pattern = separator ? "#,##0" + pattern : "0" + pattern;

            s1 = (new DecimalFormat(pattern)).format(value);

        }

        return size(s1);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(int value, String fd)

    {

        return formatInteger(value, fd, 32);

    }



    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(long value, String fd)

    {

        return formatInteger(value, fd, 64);

    }

    

    /*************************************************************

     Formats the passed value using the passed format descriptor

     and returns the result as a string.

    

     @param value the value to be formatted.

     @param fd the format descriptor. 

     @return the formatted value as a string.

    **************************************************************/    

    public static String format(short value, String fd)

    {

        return formatInteger(value, fd, 16);

    }

    

    /* Formats the passed value using the passed format descriptor

     * and returns the result as a string.

     */

    private static String formatInteger(long l, String s, int i)

    {

        extractAttributes(s);

        String s1;

        if(base == 'B')

        {

            s1 = Long.toBinaryString(l);

            s1 = repeat(64, '0') + s1;

            s1 = s1.substring(s1.length() - i);

        } else

        if(base == 'X')

        {

            s1 = Long.toHexString(l);

            s1 = repeat(16, '0') + s1;

            s1 = s1.substring(s1.length() - i / 4);

        } else

        if(separator)

        {

            s1 = (new DecimalFormat("#,###")).format(l);

        } else

        {

            s1 = String.valueOf(l);

            if(zeroFill)

                s1 = repeat(width - s1.length(), '0') + s1;

        }

        return size(s1);

    }



    // Gets information from the passed format descriptor.

    private static void extractAttributes(String s)

    {

        s = s.toUpperCase();

        alignment = 'R';

        separator = false;

        base = 'D';

        scientific = false;

        zeroFill = false;

        width = -1;

        decimals = -1;

        int i = s.indexOf(76, 0);

        if(i >; -1)

        {

            alignment = 'L';

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(67, 0);

        if(i >; -1)

        {

            alignment = 'C';

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(44, 0);

        if(i >; -1)

        {

            separator = true;

            pattern = pattern + ",###";

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(88, 0);

        if(i >; -1)

        {

            base = 'X';

            s = s.substring(0, i) + s.substring(i + 1);

        } else

        {

            i = s.indexOf(66, 0);

            if(i >; -1)

            {

                base = 'B';

                s = s.substring(0, i) + s.substring(i + 1);

            }

        }

        i = s.indexOf(83, 0);

        if(i >; -1)

        {

            scientific = true;

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(90, 0);

        if(i >; -1)

        {

            zeroFill = true;

            s = s.substring(0, i) + s.substring(i + 1);

        }

        i = s.indexOf(46, 0);

        if(i >; -1)

        {

            decimals = Integer.parseInt(s.substring(i + 1));

            s = s.substring(0, i);

        }

        if(s.length() >; 0)

            width = Integer.parseInt(s);

    }

        

    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/    

    public static void print(byte value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(char value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(double value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(float value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(int value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(long value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }

    

    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptor. No trailing End-Of-Line 

     character is printed.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void print(short value, String fd)

    {

        handle.print(format(value, fd));

        handle.flush();

    }

    

    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(byte value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(char value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(double value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(float value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(int value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(long value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }



    /*************************************************************

     Output the passed value to the standard output device using

     the passed format descriptorand followed by an End-Of-Line 

     marker.

    

     @param value the value to be printed.

     @param fd the format descriptor. 

    **************************************************************/     

    public static void println(short value, String fd)

    {

        print(value, fd);

        handle.print(EOL);

        handle.flush();

    }

   

    // Returns the string padding with 'fillChar'.    

    private static String size(String s)

    {

        int i = width - s.length();

        if(alignment == 'R')

            return repeat(i, fillChar) + s;

        if(alignment == 'L')

            return s + repeat(i, fillChar);

        else

            return repeat(i / 2, fillChar) + s + repeat(i / 2 + i % 2, fillChar);

    }    

    

    // Repeats the passed character 'times' times.

    public static String repeat(int times, char c)

    {

        String s = "";

        for(int i = 0; i < times; i++)

            s = s + c;



        return s;

    }

    

    private static final String EOL = System.getProperty("line.separator");

    private static PrintWriter handle = new PrintWriter(new OutputStreamWriter(System.out));

    public static char fillChar = ' ';

    private static char alignment;

    private static boolean separator;

    private static char base;

    private static boolean scientific;

    private static boolean zeroFill;

    private static int width;

    private static int decimals;

    private static String pattern;    

}


// class MyOutTester

// Test the format of numbers in different ways.

public class MyOutTester

{

   public static void main(String[] args)

   {

      int i = 230;

      double d = 114.495678905;

      

      // Unformatted

      System.out.print(i + " ");

      System.out.println(d);

      

      // Some formatting

      MyOut.print(i, "11");

      MyOut.println(d, "14.3");

      

      // More formatting

      MyOut.print(i, "11L");

      MyOut.println(d, ",14.7");  

      

      // Scientific

      MyOut.print(i, ",11");

      MyOut.println(d, ",14.6s"); 

      

      // Hexdecimal

      MyOut.print(i, "x11");

      MyOut.println(d, "x21");

      

      // Changed fillChar

      MyOut.fillChar = '*';

      MyOut.print(i, "11");

      MyOut.println(d, "14.3");

      

      // Special case

      MyOut.println(d, "");

   }

}              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值