Вы также можете написать свой собственный метод для форматирования вашего String
s
public static void main(String[] args) {
String line1 = "Importe a pagar ";
String line2 = "Descuento ";
String line3 = "Importe ";
String line4 = "Obsequio ";
String[] correctedStrings = setCorrectAmountOfTabs(line1, line2, line3, line4);
Arrays.stream(correctedStrings).map(line -> line + " : 50").forEach(System.out::println);
}
private static String[] setCorrectAmountOfTabs(String... lines) {
if (lines == null || lines.length == 0) return;
int lengthOfTab = 4;
int targetAmount = Arrays.stream(lines)
.map(line -> line.length() / lengthOfTab)
.max(Integer::compare)
.get();
return Arrays.stream(lines)
.map(line -> {
int currentAmount = line.length() / lengthOfTab;
String tabs = IntStream.rangeClosed(0, targetAmount - currentAmount)
.mapToObj(i -> "\t")
.collect(Collectors.joining());
return line + tabs;
})
.toArray(String[]::new);
}
Выполнение этого метода дает следующий результат
Importe a pagar : 50
Descuento : 50
Importe : 50
Obsequio : 50
Затем вы можете просто манипулироватьвыходной String
массив, чтобы использовать его внутри вашего компонента.Это дает гарантию того, что поведение всегда будет одинаковым, независимо от длины самого длинного String
Если я добавлю к нему дополнительную строку, это даст следующий результат
Importe a pagar : 50
Descuento : 50
Importe : 50
Obsequio : 50
Adding a very long line to it : 50