In this post, I am going to demo an utility class to print the table data in left aligned, right aligned, left aligned in upper case and right aligned in upper case etc.,
I am using String.format method to format (for left and right alignments) the given column of the row.
Find the below working application.
StringTableUtils.java
package com.sample.app.strings;
import static java.lang.Math.max;
import static java.lang.String.format;
import java.util.List;
public class StringTableUtils {
public static enum FormattingConstants {
LEFT_ALIGN("%-{MAX_COLUMN_LENGTH}s"), RIGHT_ALIGN("%{MAX_COLUMN_LENGTH}s"),
LEFT_ALIGN_CAPITAL_CASE("%-{MAX_COLUMN_LENGTH}S"), RIGHT_ALIGN_CAPITAL_CASE("%{MAX_COLUMN_LENGTH}S");
private String val;
FormattingConstants(String val) {
this.val = val;
}
String formatString(int width) {
return val.replace("{MAX_COLUMN_LENGTH}", "" + width);
}
}
private StringTableUtils() {
}
private static int[] maxColumnLengths(List<List<String>> table) {
final int tableWidth = table.get(0).size();
int[] maxColumnLength = new int[tableWidth];
for (List<String> row : table) {
if (row.size() != tableWidth) {
throw new IllegalArgumentException("Mismatch found in table widith. FirstRow size = " + tableWidth
+ ", current row size : " + row.size());
}
for (int i = 0; i < row.size(); i++) {
maxColumnLength[i] = max(row.get(i).length(), maxColumnLength[i]);
}
}
return maxColumnLength;
}
private static String[] formatStringsForTheColumn(List<List<String>> table, FormattingConstants alignment) {
if (table.isEmpty()) {
throw new IllegalArgumentException("Table is empty");
}
final int tableWidth = table.get(0).size();
int maxColumnLengths[] = maxColumnLengths(table);
String[] formatStrings = new String[tableWidth];
for (int i = 0; i < tableWidth; i++) {
formatStrings[i] = alignment.formatString(maxColumnLengths[i]);
}
return formatStrings;
}
public static String tableToString(List<List<String>> table, FormattingConstants alignment, char columnSeparator) {
String[] formatStrings = formatStringsForTheColumn(table, alignment);
StringBuilder builder = new StringBuilder();
for (List<String> row : table) {
for (int i = 0; i < row.size(); i++) {
builder.append(columnSeparator);
builder.append(format(formatStrings[i], row.get(i)));
}
builder.append(columnSeparator);
builder.append("\n");
}
return builder.toString();
}
}
StringTableUtilsDemo.java
package com.sample.app;
import static com.sample.app.strings.StringTableUtils.tableToString;
import java.util.Arrays;
import java.util.List;
import com.sample.app.strings.StringTableUtils.FormattingConstants;
public class StringTableUtilsDemo {
public static void main(String[] args) {
List<String> row1 = Arrays.asList("country", "capital", "Population");
List<String> row2 = Arrays.asList("India", "New Delhi", "1,425,775,850");
List<String> row3 = Arrays.asList("Canada", "Ottawa", "39,566,248");
List<List<String>> table = Arrays.asList(row1, row2, row3);
System.out.println("Left alignment table");
System.out.println(tableToString(table, FormattingConstants.LEFT_ALIGN, '|'));
System.out.println("\nRight alignment table");
System.out.println(tableToString(table, FormattingConstants.RIGHT_ALIGN, '|'));
System.out.println("\nLeft alignment & capital case table");
System.out.println(tableToString(table, FormattingConstants.LEFT_ALIGN_CAPITAL_CASE, '|'));
System.out.println("\nRight alignment & capital case table");
System.out.println(tableToString(table, FormattingConstants.RIGHT_ALIGN_CAPITAL_CASE, '|'));
}
}
Output
Left alignment table |country|capital |Population | |India |New Delhi|1,425,775,850| |Canada |Ottawa |39,566,248 | Right alignment table |country| capital| Population| | India|New Delhi|1,425,775,850| | Canada| Ottawa| 39,566,248| Left alignment & capital case table |COUNTRY|CAPITAL |POPULATION | |INDIA |NEW DELHI|1,425,775,850| |CANADA |OTTAWA |39,566,248 | Right alignment & capital case table |COUNTRY| CAPITAL| POPULATION| | INDIA|NEW DELHI|1,425,775,850| | CANADA| OTTAWA| 39,566,248
No comments:
Post a Comment