seamus_padraig
OSNN Newbie
- Joined
- 10 Dec 2004
- Messages
- 2
How dow you align decimal numbers when outputting them to the console in Java?
/**
* Number Formatting, either by the length of the numeric string
* or by the length from the first number to the decimal point.
*
* @author Geoffrey Garside <java AT stealth-ninja DOT co DOT uk>
* @version 1.0, 2004/12/11
*/
public class NumberFormat {
public static String[] alignByLength(final int [] numbers) {
// Create Similar array but for strings
String [] formatted = numbersToStrings(numbers);
int length = maxLength(formatted);
formatted = appendSpaces(formatted, length);
return formatted;
}
public static String[] alignByLength(final double [] numbers) {
// Create Similar array but for strings
String [] formatted = numbersToStrings(numbers);
int length = maxLength(formatted);
formatted = appendSpaces(formatted, length);
return formatted;
}
public static String[] alignByLength(final float [] numbers) {
// Create Similar array but for strings
String [] formatted = numbersToStrings(numbers);
int length = maxLength(formatted);
formatted = appendSpaces(formatted, length);
return formatted;
}
public static String[] alignByDecimal(final double [] numbers) {
// Create Similar array but for strings
String [] formatted = numbersToStrings(numbers);
int length = maxLength(formatted, '.');
formatted = appendSpaces(formatted, length);
return formatted;
}
public static String[] alignByDecimal(final float [] numbers) {
// Create Similar array but for strings
String [] formatted = numbersToStrings(numbers);
int length = maxLength(formatted, '.');
formatted = appendSpaces(formatted, length);
return formatted;
}
private static String[] appendSpaces(String[] strings, final int length) {
// ok, now we need to add some spaces to the beginning
// of each number so that they should all align properly
for (int i = 0; i < strings.length; i++) {
if (strings[i].length() < length) {
int difference = length - strings[i].length();
strings[i] = spaces(difference) + strings[i];
}
}
return strings;
}
private static String spaces(final int length) {
StringBuffer spaces = new StringBuffer();
for (int i = 0; i < length; i++) {
spaces.append(" ");
}
return spaces.toString();
}
private static int maxLength(final String[] strings, final char find) {
int length = 0;
for (int i = 0; i < strings.length; i++) {
if (strings[i].indexOf(find) > length) {
length = strings[i].indexOf(find);
}
}
return length;
}
private static int maxLength(final String[] strings) {
// lets find the longest number
int length = 0;
for (int i = 0; i < strings.length; i++) {
if (strings[i].length() > length) {
length = strings[i].length();
}
}
return length;
}
private static String[] numbersToStrings(final int [] numbers) {
// Create Similar array but for strings
String [] strings = new String[numbers.length];
for (int i = 0; i < strings.length; i++) {
strings[i] = ""+ numbers[i];
}
return strings;
}
private static String[] numbersToStrings(final double [] numbers) {
// Create Similar array but for strings
String [] strings = new String[numbers.length];
for (int i = 0; i < strings.length; i++) {
strings[i] = ""+ numbers[i];
}
return strings;
}
private static String[] numbersToStrings(final float [] numbers) {
// Create Similar array but for strings
String [] strings = new String[numbers.length];
for (int i = 0; i < strings.length; i++) {
strings[i] = ""+ numbers[i];
}
return strings;
}
}