Java tutorial
/* * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002. * All rights reserved. Software written by Ian F. Darwin and others. * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee * cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's, * pioneering role in inventing and promulgating (and standardizing) the Java * language and environment is gratefully acknowledged. * * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for * inventing predecessor languages C and C++ is also gratefully acknowledged. */ import java.text.FieldPosition; import java.text.Format; import java.text.ParsePosition; /** * Bare-minimum "String formatter": format a string to a given maximum length * with left, centre, or right justification. */ public class StringFormat extends Format { /* Constant for left justification. */ public static final int JUST_LEFT = 'l'; /* Constant for centering. */ public static final int JUST_CENTRE = 'c'; /* Constant for centering, for those who spell "centre" the American way. */ public static final int JUST_CENTER = JUST_CENTRE; /** Constant for right-justified Strings. */ public static final int JUST_RIGHT = 'r'; /** Current justification */ private int just; /** Current max length */ private int maxChars; public StringFormat(int maxCh, int justn) { switch (justn) { case JUST_LEFT: case JUST_CENTRE: case JUST_RIGHT: this.just = justn; break; default: throw new IllegalArgumentException("invalid justification arg."); } if (maxCh < 1) { throw new IllegalArgumentException("maxChars must be positive."); } this.maxChars = maxCh; } /** Format a String */ public StringBuffer format(Object obj, StringBuffer where, FieldPosition ignore) { String s = (String) obj; String wanted = s.substring(0, Math.min(s.length(), maxChars)); // If no space left for justification, return maxChars' worth */ if (wanted.length() > maxChars) { where.append(wanted); } // Else get the spaces in the right place. else switch (just) { case JUST_RIGHT: pad(where, maxChars - wanted.length()); where.append(wanted); break; case JUST_CENTRE: int startPos = where.length(); pad(where, (maxChars - wanted.length()) / 2); where.append(wanted); pad(where, (maxChars - wanted.length()) / 2); // Adjust for "rounding error" pad(where, maxChars - (where.length() - startPos)); break; case JUST_LEFT: where.append(wanted); pad(where, maxChars - wanted.length()); break; } return where; } protected final void pad(StringBuffer to, int howMany) { for (int i = 0; i < howMany; i++) to.append(' '); } /** Convenience Routine */ String format(String s) { return format(s, new StringBuffer(), null).toString(); } /** * ParseObject is required by Format interface, but not useful here. */ public Object parseObject(String source, ParsePosition pos) { return source; } }