All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sleepycat.utilint.FormatUtil Maven / Gradle / Ivy

The newest version!
/*-
 * Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle Berkeley
 * DB Java Edition made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle Berkeley DB Java Edition for a copy of the
 * license and additional information.
 */

package com.sleepycat.utilint;

import java.text.DecimalFormat;
import java.text.Format;
import java.util.Iterator;
import java.util.SortedSet;

/**
 * A home for misc formatting utilities.
 */
public class FormatUtil {

    private static final ThreadLocal DECIMAL_SCALE0 =
        new ThreadLocal() {
            @Override
            public DecimalFormat initialValue() {
                return new DecimalFormat("###,###,###,###,###,###,###");
            }
        };

    private static final ThreadLocal DECIMAL_SCALE2 =
        new ThreadLocal() {
            @Override
            public DecimalFormat initialValue() {
                return new DecimalFormat("###,###,###,###,###,###,###.##");
            }
        };

    /**
     * Returns a thread-local DecimalFormat with US formatting and scale zero:
     * ###,###,###,###,###,###,###
     *
     * 

A ThreadLocal value is returned because {@link Format} objects are * generally not synchronized. The returned value should only be used in * the current thread.

*/ public static DecimalFormat decimalScale0() { return DECIMAL_SCALE0.get(); } /** * Returns a thread-local DecimalFormat with US formatting and scale two: * ###,###,###,###,###,###,###.## * *

A ThreadLocal value is returned because {@link Format} objects are * generally not synchronized. The returned value should only be used in * the current thread.

*/ public static DecimalFormat decimalScale2() { return DECIMAL_SCALE2.get(); } /** * Utility class to convert a sorted set of long values to a compact string * suitable for printing. The representation is made compact by identifying * ranges so that the sorted set can be represented as a sequence of hex * ranges and singletons. */ public static String asHexString(final SortedSet set) { if (set.isEmpty()) { return ""; } final StringBuilder sb = new StringBuilder(); final Iterator i = set.iterator(); long rstart = i.next(); long rend = rstart; while (i.hasNext()) { final long f = i.next(); if (f == (rend + 1)) { /* Continue the existing range. */ rend++; continue; } /* flush and start new range */ flushRange(sb, rstart, rend); rstart = rend = f; } flushRange(sb, rstart, rend); /* Discard initial space in return value. */ sb.deleteCharAt(0); return sb.toString(); } private static void flushRange(final StringBuilder sb, final long rstart, final long rend) { if (rstart == -1) { return; } if (rstart == rend) { sb.append(" 0x").append(Long.toHexString(rstart)); } else { sb.append(" 0x").append(Long.toHexString(rstart)). append("-"). append("0x").append(Long.toHexString(rend)); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy