Java Number Format Pattern matchOptionalFormatting(Number number, String formatting, StringBuffer outputTo)

Here you can find the source of matchOptionalFormatting(Number number, String formatting, StringBuffer outputTo)

Description

match Optional Formatting

License

Apache License

Declaration

private static int matchOptionalFormatting(Number number, String formatting, StringBuffer outputTo) 

Method Source Code

//package com.java2s;
/* NOTICE: This file has been changed by Plutext Pty Ltd for use in docx4j.
 * The package name has been changed; there may also be other changes.
 * //w  w  w.ja  v  a 2s.c o m
 * This notice is included to meet the condition in clause 4(b) of the License. 
 */

import java.text.FieldPosition;
import java.text.NumberFormat;

import java.util.Locale;

public class Main {
    private static int matchOptionalFormatting(Number number, String formatting, StringBuffer outputTo) {
        NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
        if ((0 < formatting.length()) && Character.isDigit(formatting.charAt(0))) {
            numberFormat.setMinimumIntegerDigits(Integer.parseInt(formatting.charAt(0) + ""));
            if ((2 < formatting.length()) && (formatting.charAt(1) == '.')
                    && Character.isDigit(formatting.charAt(2))) {
                numberFormat.setMaximumFractionDigits(Integer.parseInt(formatting.charAt(2) + ""));
                numberFormat.format(number, outputTo, new FieldPosition(0));
                return 3;
            }
            numberFormat.format(number, outputTo, new FieldPosition(0));
            return 1;
        } else if ((0 < formatting.length()) && (formatting.charAt(0) == '.')) {
            if ((1 < formatting.length()) && Character.isDigit(formatting.charAt(1))) {
                numberFormat.setMaximumFractionDigits(Integer.parseInt(formatting.charAt(1) + ""));
                numberFormat.format(number, outputTo, new FieldPosition(0));
                return 2;
            }
        }
        numberFormat.format(number, outputTo, new FieldPosition(0));
        return 1;
    }

    /**
     *  Apply printf() like formatting to a string.
     *  Primarily used for logging.
     * @param  message  the string with embedded formatting info
     *                 eg. "This is a test %2.2"
     * @param  params   array of values to format into the string
     * @return          The formatted string
     */
    public static String format(String message, Object[] params) {
        int currentParamNumber = 0;
        StringBuffer formattedMessage = new StringBuffer();
        for (int i = 0; i < message.length(); i++) {
            if (message.charAt(i) == '%') {
                if (currentParamNumber >= params.length) {
                    formattedMessage.append("?missing data?");
                } else if ((params[currentParamNumber] instanceof Number) && (i + 1 < message.length())) {
                    i += matchOptionalFormatting((Number) params[currentParamNumber++], message.substring(i + 1),
                            formattedMessage);
                } else {
                    formattedMessage.append(params[currentParamNumber++].toString());
                }
            } else {
                if ((message.charAt(i) == '\\') && (i + 1 < message.length()) && (message.charAt(i + 1) == '%')) {
                    formattedMessage.append('%');
                    i++;
                } else {
                    formattedMessage.append(message.charAt(i));
                }
            }
        }
        return formattedMessage.toString();
    }
}

Related

  1. getValueFormatted(String name, String value)
  2. getValueFormatter()
  3. getZeroDecimalFormat()
  4. isDecimalFormat(DecimalFormat decimalFormat)
  5. isDecimalFormatValid(final String pattern)
  6. normalizeNumberFormat(NumberFormat numberFormat, int scale, int precision)
  7. objectToString(Object obj, DecimalFormat fmt)
  8. print(float[] array, NumberFormat nf)
  9. resetDecimalFormat()