Строковое заполнение на основе длины в Java

Итак, у меня есть две строки (line и objectCode)

Сначала я хочу напечатать строку, а затем напечатать количество пробелов в зависимости от длины строки, а затем напечатать objectCode. (Так что все объектные коды выстроены в очередь.

Я пытался, но получил вывод, как:

0000    FIRST   ST      RETADR,LX    172028
0003            LD      BX,#LENGTH    692028
0006    CLOOP   +JSUB   RDREC    03100000

objectCode - последние цифры в каждой строке (172028), как вы можете видеть, они не выстроены в линию, как я хочу.

Итак, по сути я хочу что-то вроде:

0000    FIRST   ST      RETADR,LX    172028
0003            LD      BX,#LENGTH   692028
0006    CLOOP   +JSUB   RDREC        03100000

Я просто не могу понять, как это получить. Спасибо.

редактировать

Что я пробовал:

Сначала попробуйте (это то, что должно было работать):

String write = String.format("%-45s%s", line, objectCode);
fw.write(write + "\n"); //Using a FileWriter

Во-вторых, я попытался (как последнее усилие рва):

fw.write(line);
int numOfSpaces = 40 - line.length(); //arbitrary number to check if this works
for (int spaces = 0; spaces < numOfSpaces; spaces++) {
    fw.write(" ");
}
fw.write(objectCode);

Я полагал, что это напечатало бы меньше пробелов для длинных длин строки.. Но это, казалось, не работало.

РЕДАКТИРОВАТЬ

Я понял проблему, но не знаю, как ее решить.

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

Итак, у меня было:

line = input.nextLine();
words[] = line.trim().split("\\s+"); //Splitting by white space

Я думаю, что метод trim() - моя проблема здесь... Однако он мне нужен для того, чтобы делать то, для чего предназначена программа.

1 ответ

Хорошо, так что я понял это и хотел опубликовать ответ на случай, если кто-то столкнется с этой проблемой.

Итак, как я уже говорил, проблема была в том, что я обрезал строковую переменную на основе пробела (чтобы каждое слово в строке было отделено):

String line = input.next
String[] words = line.trim().split("\\s+"); //Get each word by itself

Проблема заключалась в том, что позже в программе я хотел что-то напечатать после этой строки. И не было никакого способа получить правильную длину строки, потому что все пробелы исчезли:

0000    FIRST     ST        RETADR,LX  //line.length = 20 (no whitespace)
0003              LD        BX,#LENGTH //line.length = 16 (no whitespace)

Обе строки не учитывают пробелы в их длине. Поэтому, когда я пишу что-то после строки, как это (с помощью файлового редактора)

String write = String.format("%-30s, %s", line, objectCode);
fw.write(write + "\n");

Я бы получил:

0000    FIRST     ST        RETADR,LX       172028
0003              LD        BX,#LENGTH            692028

Это потому, что пробелы не учитываются, когда я выделил 30 пробелов для строки (%30).

Чтобы решить эту проблему, мне нужно было вместо того, чтобы форматировать саму строку, я отформатировал бы каждое слово в строке:

String write = String.format("%-10s%-10s%-10s%-10s%", word1, word2, word3, word4);
fw.write(write + "\t" + objectCode + "\n");

Так что теперь это фактически дало мне то, что я хотел, потому что каждой строке выделено одинаковое количество места, и они выровнены по левому краю (-10s% и т. Д.)

0000    FIRST     ST        RETADR,LX   172028
0003              LD        BX,#LENGTH  692028
Другие вопросы по тегам