Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
144
Task/Align-columns/Java/align-columns.java
Normal file
144
Task/Align-columns/Java/align-columns.java
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* Aligns fields into columns, separated by "|"
|
||||
*/
|
||||
public class ColumnAligner {
|
||||
private List<String[]> words = new ArrayList<>();
|
||||
private int columns = 0;
|
||||
private List<Integer> columnWidths = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Initialize columns aligner from lines in a single string
|
||||
*
|
||||
* @param s
|
||||
* lines in a single string. Empty string does form a column.
|
||||
*/
|
||||
public ColumnAligner(String s) {
|
||||
String[] lines = s.split("\\n");
|
||||
for (String line : lines) {
|
||||
processInputLine(line);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize columns aligner from lines in a list of strings
|
||||
*
|
||||
* @param lines
|
||||
* lines in a single string. Empty string does form a column.
|
||||
*/
|
||||
public ColumnAligner(List<String> lines) {
|
||||
for (String line : lines) {
|
||||
processInputLine(line);
|
||||
}
|
||||
}
|
||||
|
||||
private void processInputLine(String line) {
|
||||
String[] lineWords = line.split("\\$");
|
||||
words.add(lineWords);
|
||||
columns = Math.max(columns, lineWords.length);
|
||||
for (int i = 0; i < lineWords.length; i++) {
|
||||
String word = lineWords[i];
|
||||
if (i >= columnWidths.size()) {
|
||||
columnWidths.add(word.length());
|
||||
} else {
|
||||
columnWidths.set(i, Math.max(columnWidths.get(i), word.length()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface AlignFunction {
|
||||
String align(String s, int length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Left-align all columns
|
||||
*
|
||||
* @return Lines, terminated by "\n" of columns, separated by "|"
|
||||
*/
|
||||
public String alignLeft() {
|
||||
return align(new AlignFunction() {
|
||||
@Override
|
||||
public String align(String s, int length) {
|
||||
return StringUtils.rightPad(s, length);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Right-align all columns
|
||||
*
|
||||
* @return Lines, terminated by "\n" of columns, separated by "|"
|
||||
*/
|
||||
public String alignRight() {
|
||||
return align(new AlignFunction() {
|
||||
@Override
|
||||
public String align(String s, int length) {
|
||||
return StringUtils.leftPad(s, length);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Center-align all columns
|
||||
*
|
||||
* @return Lines, terminated by "\n" of columns, separated by "|"
|
||||
*/
|
||||
public String alignCenter() {
|
||||
return align(new AlignFunction() {
|
||||
@Override
|
||||
public String align(String s, int length) {
|
||||
return StringUtils.center(s, length);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String align(AlignFunction a) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
for (String[] lineWords : words) {
|
||||
for (int i = 0; i < lineWords.length; i++) {
|
||||
String word = lineWords[i];
|
||||
if (i == 0) {
|
||||
result.append("|");
|
||||
}
|
||||
result.append(a.align(word, columnWidths.get(i)) + "|");
|
||||
}
|
||||
result.append("\n");
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
public static void main(String args[]) throws IOException {
|
||||
if (args.length < 1) {
|
||||
System.out.println("Usage: ColumnAligner file [left|right|center]");
|
||||
return;
|
||||
}
|
||||
String filePath = args[0];
|
||||
String alignment = "left";
|
||||
if (args.length >= 2) {
|
||||
alignment = args[1];
|
||||
}
|
||||
ColumnAligner ca = new ColumnAligner(Files.readAllLines(Paths.get(filePath), StandardCharsets.UTF_8));
|
||||
switch (alignment) {
|
||||
case "left":
|
||||
System.out.print(ca.alignLeft());
|
||||
break;
|
||||
case "right":
|
||||
System.out.print(ca.alignRight());
|
||||
break;
|
||||
case "center":
|
||||
System.out.print(ca.alignCenter());
|
||||
break;
|
||||
default:
|
||||
System.err.println(String.format("Error! Unknown alignment: '%s'", alignment));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue