У меня есть простая реализация для вашей задачи, которая не требует внешних библиотек.Если вы хотите использовать внешние библиотеки, есть достаточно методов, например, в Apache-Commons или Guava.Возможно, это можно сделать умнее, но это поможет:
class Member {
String id;
String name;
int age;
LocalDate date;
int tlfNo;
boolean activeMember;
LocalDate nextPayment;
public Member(String id, String name, int age, int tlfNo, boolean activeMember, LocalDate nextPayment) {
this.id = id;
this.name = name;
this.age = age;
this.tlfNo = tlfNo;
this.activeMember = activeMember;
this.nextPayment = nextPayment;
}
@Override
public String toString() {
return String.format("|ID: %s| Name: %s| Age: %s| Tlf.: %s| Active: %s| Next payment: %s|",
doFormat(id, "id", 10), doFormat(name, "name", 10),
doFormat(String.valueOf(age), "age", 10),
doFormat(String.valueOf(tlfNo), "tlfNo", 10),
doFormat(String.valueOf(activeMember), "active", 10),
doFormat(nextPayment.toString(), "nextPayment", 20));
}
String doFormat(String value, String fieldName, int maxLenght) {
if (value.length() > maxLenght) {
throw new IllegalArgumentException(String.format("cannot format string longer than %s for %s, value = %s", maxLenght, fieldName, value));
}
return padLeftSpaces(value, maxLenght);
}
public String padtLefSpaces(String inputString, int length) {
if (inputString.length() >= length) {
return inputString;
}
StringBuilder sb = new StringBuilder();
while (sb.length() < length - inputString.length()) {
sb.append(' ');
}
sb.append(inputString);
return sb.toString();
}
}
Идея состоит в том, что вы заполняете все поля пробелами и заменяете только те, которые заняты.Левый метод заимствован из bealdung