/** * Set the length of the string, padding with the supplied character if the supplied string is shorter than desired, or * truncating the string if it is longer than desired. Unlike {@link #justifyLeft(String, int, char)}, this method does not * remove leading and trailing whitespace. * * @param original the string for which the length is to be set; may not be null * @param length the desired length; must be positive * @param padChar the character to use for padding, if the supplied string is not long enough * @return the string of the desired length * @see #justifyLeft(String, int, char) */ public static String setLength(String original, int length, char padChar) { return justifyLeft(original, length, padChar, false); }
protected static String justifyLeft(String str, final int width, char padWithChar, boolean trimWhitespace) { // Trim the leading and trailing whitespace ... str = str != null ? (trimWhitespace ? str.trim() : str) : ""; int addChars = width - str.length(); if (addChars < 0) { // truncate return str.subSequence(0, width).toString(); } // Write the content ... final StringBuilder sb = new StringBuilder(); sb.append(str); // Append the whitespace ... while (addChars > 0) { sb.append(padWithChar); --addChars; } return sb.toString(); }
/** * Justify the contents of the string. * * @param justify the way in which the string is to be justified * @param str the string to be right justified; if null, an empty string is used * @param width the desired width of the string; must be positive * @param padWithChar the character to use for padding, if needed * @return the right justified string */ public static String justify(Justify justify, String str, final int width, char padWithChar) { switch (justify) { case LEFT: return justifyLeft(str, width, padWithChar); case RIGHT: return justifyRight(str, width, padWithChar); case CENTER: return justifyCenter(str, width, padWithChar); } assert false; return null; }
@Test public void justifyLeftShouldRemoveLeadingWhitespace() { assertEquals("This ", Strings.justifyLeft(" This", 10, ' ')); assertEquals("This ", Strings.justifyLeft("\tThis", 10, ' ')); }
@Test public void justifyLeftShouldTruncateStringsThatAreTooLong() { assertEquals("This is the st", Strings.justifyLeft("This is the string", 14, ' ')); }
@Test public void justifyLeftShouldAppendCharacterForEmptyStrings() { assertEquals(" ", Strings.justifyLeft("", 10, ' ')); }
@Test public void justifyLeftShouldReturnStringsThatAreTheDesiredLength() { assertEquals("This is the string", Strings.justifyLeft("This is the string", 18, ' ')); }
@Test public void justifyLeftShouldAppendCharacterForStringsThatAreTooShort() { assertEquals("This ", Strings.justifyLeft("This", 10, ' ')); }
@Test public void justifyLeftShouldAppendCharacterForNullStrings() { assertEquals(" ", Strings.justifyLeft(null, 10, ' ')); }
/** * Set the length of the string, padding with the supplied character if the supplied string is shorter than desired, or * truncating the string if it is longer than desired. Unlike {@link #justifyLeft(String, int, char)}, this method does not * remove leading and trailing whitespace. * * @param original the string for which the length is to be set; may not be null * @param length the desired length; must be positive * @param padChar the character to use for padding, if the supplied string is not long enough * @return the string of the desired length * @see #justifyLeft(String, int, char) */ public static String setLength(String original, int length, char padChar) { return justifyLeft(original, length, padChar, false); }
protected static String justifyLeft(String str, final int width, char padWithChar, boolean trimWhitespace) { // Trim the leading and trailing whitespace ... str = str != null ? (trimWhitespace ? str.trim() : str) : ""; int addChars = width - str.length(); if (addChars < 0) { // truncate return str.subSequence(0, width).toString(); } // Write the content ... final StringBuilder sb = new StringBuilder(); sb.append(str); // Append the whitespace ... while (addChars > 0) { sb.append(padWithChar); --addChars; } return sb.toString(); }
/** * Justify the contents of the string. * * @param justify the way in which the string is to be justified * @param str the string to be right justified; if null, an empty string is used * @param width the desired width of the string; must be positive * @param padWithChar the character to use for padding, if needed * @return the right justified string */ public static String justify(Justify justify, String str, final int width, char padWithChar) { switch (justify) { case LEFT: return justifyLeft(str, width, padWithChar); case RIGHT: return justifyRight(str, width, padWithChar); case CENTER: return justifyCenter(str, width, padWithChar); } assert false; return null; }