2016-06-03 11 views
0

Итак, у меня есть список объектов java, которые нужно записать в текстовый файл с определенным форматом.Как создать шаблон для строки?

например.

class car 
{ 
    String license; 
    String color; 
    String model; 
    String numOfSeats; 
} 

, и это должно быть записано в виде текстового файла, в котором формат каждой строки

license--color-----model-------numOfSeats------

license должен занимать 10 байт, даже если длина фактической строки меньше ,

color должен занимать 10 байт, а model должны занимать 12 байт и т.д.

Так что я хочу, чтобы создать шаблон таким образом, что я могу просто подключить в переменных, и они занимают необходимое количество байтов (т.е. заполняется пробелами, если короче, усекается, если дольше)

Так что в будущем, если шаблон изменится, мне не нужно вносить какие-либо изменения в код. Мне просто нужно изменить шаблон.

Я изучал JEXL, но я не уверен, как этого добиться.

+1

Вы просмотрели стандартный метод printf() Java (см. [Здесь] (https://docs.oracle.com/javase/tutorial/essential/io/formatting.html))? Если да, то чего это не хватает? –

+0

Возможно, что-то в этом роде: http://stackoverflow.com/questions/15635273/can-we-use-string-format-to-pad-prefix-with-a-character-with-desired-length? – ManoDestra

ответ

0

мне удалось достичь этого с помощью JEXL

expression = ${utilClass.rpad(car.getLicense(), 10)}

и

JexlEngine jexl = new JexlBuilder().create(); JxltEngine jxlt = jexl.createJxltEngine(); JxltEngine.Expression expr = jxlt.createExpression(expression); JexlContext context = new MapContext(); context.set("utilClass", new UtilClass());context.set("car", new Car())

expr.prepare(context); String s= expr.evaluate(context).toString();

я могу получить выражение из файла и, таким образом, при изменении макета , я просто изменяю файл, и мне не нужно касаться кода.