2015-04-11 5 views
0

Итак, у меня есть две строки (строки и objectCode)Строка набивка на основе длины в Java

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

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

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); 

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

EDIT

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

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

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

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

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

+0

[это migh быть дубликатом это] [1] [1] : http://stackoverflow.com/questions/12793593/how-to-align-string-on-console-output –

+0

Основываясь на ваших тегах, вы, кажется, знаете, что вам нужно 'Stirng.format' (или его другие формы, System.out.printf'), можем ли мы увидеть ваши попытки использовать его? – Pshemo

+0

Также вы можете посмотреть http://stackoverflow.com/a/15215434/1393766 – Pshemo

ответ

0

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

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

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) 

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

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

Я хотел бы получить:

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

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

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

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 
Смежные вопросы