
com.cucumber.utils.engineering.utils.StringFormat Maven / Gradle / Ivy
package com.cucumber.utils.engineering.utils;
import com.cucumber.utils.engineering.placeholders.ScenarioPropertiesParser;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringSubstitutor;
import java.util.*;
public class StringFormat {
public static String replaceProps(Object source, Map values) {
return StringSubstitutor.replace(source, values, ScenarioPropertiesParser.SYMBOL_START, ScenarioPropertiesParser.SYMBOL_END);
}
/**
* Format strings into columns
*
* @param columnWidth
* @param columns
* @return
*/
public static String toColumns(int columnWidth, String... columns) {
return StringColumnFormatter.format(columnWidth, columns);
}
}
class StringColumnFormatter {
public static String format(int columnWidth, String... columns) {
checkArguments(columnWidth, columns);
if (columns == null) {
return null;
}
if (columns.length == 1) {
return columns[0];
}
List columnLinesList = splitColumnLines(columnWidth, columns);
int maxColumnLines = columnLinesList.stream().max(Comparator.comparing(array -> array != null ? array.length : 1)).get().length;
Map> rows = new HashMap<>();
for (int i = 0; i < maxColumnLines; i++) {
List rowEntry = new ArrayList<>();
for (String[] columnLines : columnLinesList) {
rowEntry.add(columnLines != null ? columnLines.length > i ? columnLines[i] : "" : null);
}
rows.put(i, rowEntry);
}
return rowsToString(columnsFormat(columnWidth, columns.length), rows);
}
private static List splitColumnLines(int columnWidth, String... columns) {
List columnLinesList = new ArrayList<>();
Arrays.stream(columns).forEach(column ->
columnLinesList.add(column != null ? column.split("\\n|\\r|(?<=\\G.{" + columnWidth + "})") : new String[]{null})
);
return columnLinesList;
}
private static void checkArguments(int columnWidth, String... columns) {
if (columnWidth < 1) {
throw new IllegalArgumentException("Column width must be greater than 0");
}
}
private static String columnsFormat(int columnWidth, int columnsNr) {
return StringUtils.repeat("%-" + columnWidth + "s ", columnsNr);
}
private static String rowsToString(String format, Map> rows) {
StringBuilder result = new StringBuilder();
rows.forEach((k, v) -> result.append(String.format(format, v.toArray())).append("\n"));
return result.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy