Строковое заполнение на основе длины в 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