Mega Code Archive

 
Categories / Java / Data Type
 

Left pad a String with spaces ( )

/*   * Licensed to the Apache Software Foundation (ASF) under one or more  *  contributor license agreements.  See the NOTICE file distributed with  *  this work for additional information regarding copyright ownership.  *  The ASF licenses this file to You under the Apache License, Version 2.0  *  (the "License"); you may not use this file except in compliance with  *  the License.  You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  *  Unless required by applicable law or agreed to in writing, software  *  distributed under the License is distributed on an "AS IS" BASIS,  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *  See the License for the specific language governing permissions and  *  limitations under the License.  *  *  */ public class Main {   /**    * <p>The maximum size to which the padding constant(s) can expand.</p>    */   private static final int PAD_LIMIT = 8192;   /**    * <p>Left pad a String with spaces (' ').</p>    *    * <p>The String is padded to the size of <code>size<code>.</p>    *    * <pre>    * StringUtils.leftPad(null, *)   = null    * StringUtils.leftPad("", 3)     = "   "    * StringUtils.leftPad("bat", 3)  = "bat"    * StringUtils.leftPad("bat", 5)  = "  bat"    * StringUtils.leftPad("bat", 1)  = "bat"    * StringUtils.leftPad("bat", -1) = "bat"    * </pre>    *    * @param str  the String to pad out, may be null    * @param size  the size to pad to    * @return left padded String or original String if no padding is necessary,    *  <code>null</code> if null String input    */   public static String leftPad(String str, int size) {       return leftPad(str, size, ' ');   }   /**    * <p>Left pad a String with a specified character.</p>    *    * <p>Pad to a size of <code>size</code>.</p>    *    * <pre>    * StringUtils.leftPad(null, *, *)     = null    * StringUtils.leftPad("", 3, 'z')     = "zzz"    * StringUtils.leftPad("bat", 3, 'z')  = "bat"    * StringUtils.leftPad("bat", 5, 'z')  = "zzbat"    * StringUtils.leftPad("bat", 1, 'z')  = "bat"    * StringUtils.leftPad("bat", -1, 'z') = "bat"    * </pre>    *    * @param str  the String to pad out, may be null    * @param size  the size to pad to    * @param padChar  the character to pad with    * @return left padded String or original String if no padding is necessary,    *  <code>null</code> if null String input    * @since 2.0    */   public static String leftPad(String str, int size, char padChar) {       if (str == null) {           return null;       }       int pads = size - str.length();       if (pads <= 0) {           return str; // returns original String when possible       }       if (pads > PAD_LIMIT) {           return leftPad(str, size, String.valueOf(padChar));       }       return padding(pads, padChar).concat(str);   }   /**    * <p>Left pad a String with a specified String.</p>    *    * <p>Pad to a size of <code>size</code>.</p>    *    * <pre>    * StringUtils.leftPad(null, *, *)      = null    * StringUtils.leftPad("", 3, "z")      = "zzz"    * StringUtils.leftPad("bat", 3, "yz")  = "bat"    * StringUtils.leftPad("bat", 5, "yz")  = "yzbat"    * StringUtils.leftPad("bat", 8, "yz")  = "yzyzybat"    * StringUtils.leftPad("bat", 1, "yz")  = "bat"    * StringUtils.leftPad("bat", -1, "yz") = "bat"    * StringUtils.leftPad("bat", 5, null)  = "  bat"    * StringUtils.leftPad("bat", 5, "")    = "  bat"    * </pre>    *    * @param str  the String to pad out, may be null    * @param size  the size to pad to    * @param padStr  the String to pad with, null or empty treated as single space    * @return left padded String or original String if no padding is necessary,    *  <code>null</code> if null String input    */   public static String leftPad(String str, int size, String padStr) {       if (str == null) {           return null;       }       if (isEmpty(padStr)) {           padStr = " ";       }       int padLen = padStr.length();       int strLen = str.length();       int pads = size - strLen;       if (pads <= 0) {           return str; // returns original String when possible       }       if (padLen == 1 && pads <= PAD_LIMIT) {           return leftPad(str, size, padStr.charAt(0));       }       if (pads == padLen) {           return padStr.concat(str);       } else if (pads < padLen) {           return padStr.substring(0, pads).concat(str);       } else {           char[] padding = new char[pads];           char[] padChars = padStr.toCharArray();           for (int i = 0; i < pads; i++) {               padding[i] = padChars[i % padLen];           }           return new String(padding).concat(str);       }   }   /**    * <p>Returns padding using the specified delimiter repeated    * to a given length.</p>    *    * <pre>    * StringUtils.padding(0, 'e')  = ""    * StringUtils.padding(3, 'e')  = "eee"    * StringUtils.padding(-2, 'e') = IndexOutOfBoundsException    * </pre>    *    * <p>Note: this method doesn't not support padding with    * <a href="http://www.unicode.org/glossary/#supplementary_character">Unicode Supplementary Characters</a>    * as they require a pair of <code>char</code>s to be represented.    * If you are needing to support full I18N of your applications    * consider using {@link #repeat(String, int)} instead.     * </p>    *    * @param repeat  number of times to repeat delim    * @param padChar  character to repeat    * @return String with repeated character    * @throws IndexOutOfBoundsException if <code>repeat &lt; 0</code>    * @see #repeat(String, int)    */   private static String padding(int repeat, char padChar) throws IndexOutOfBoundsException {       if (repeat < 0) {           throw new IndexOutOfBoundsException("Cannot pad a negative amount: " + repeat);       }       final char[] buf = new char[repeat];       for (int i = 0; i < buf.length; i++) {           buf[i] = padChar;       }       return new String(buf);   }   // Empty checks   //-----------------------------------------------------------------------   /**    * <p>Checks if a String is empty ("") or null.</p>    *    * <pre>    * StringUtils.isEmpty(null)      = true    * StringUtils.isEmpty("")        = true    * StringUtils.isEmpty(" ")       = false    * StringUtils.isEmpty("bob")     = false    * StringUtils.isEmpty("  bob  ") = false    * </pre>    *    * <p>NOTE: This method changed in Lang version 2.0.    * It no longer trims the String.    * That functionality is available in isBlank().</p>    *    * @param str  the String to check, may be null    * @return <code>true</code> if the String is empty or null    */   public static boolean isEmpty(String str) {       return str == null || str.length() == 0;   } }