2015-10-30 2 views
0

Я пытаюсь форматировать два массива в Java, чтобы напечатать что-то вроде этого:печати Java массивы в столбцах

Inventory Number  Books       Prices 
------------------------------------------------------------------ 
1      Intro to Java     $45.99 
2      Intro to C++     $89.34 
3      Design Patterns    $100.00 
4      Perl       $25.00 

Я использую следующий код:

for(int i = 0; i < 4; i++) { 
     System.out.print(i+1); 
     System.out.print("      " + books[i] + " "); 
     System.out.print("     " + "$" + booksPrices[i] + " "); 
     System.out.print("\n"); 
    } 

Но я получаю это плохо отформатированный результат вместо:

Inventory Number  Books       Prices 
------------------------------------------------------------------ 
1      Intro to Java     $45.99 
2      Intro to C++     $89.34 
3      Design Patterns     $100.0 
4      Perl     $25.0 

Как бы я идти о выравнивая все столбцы непосредственно под заголовками наверху?

Есть ли лучший способ сделать это?

+0

Привет, попробуйте использовать '\ t'. Например: System.out.println (String.format ("\ t% s", books [i]); ' И для двойной вкладки используйте \ t \ t и т. Д. Столько, сколько хотите –

ответ

5

Вы должны смотреть на формат:

System.out.format("%15.2f", booksPrices[i]); 

, которые дали бы 15 слотов, и подушечка его с пробелами, если это необходимо.

Однако я заметил, что ты не прав, оправдывая свои числа, в этом случае вы хотите выравнивание по левому краю на поле книги:

System.out.printf("%-30s", books[i]); 

Вот рабочий фрагмент пример:

String books[] = {"This", "That", "The Other Longer One", "Fourth One"}; 
double booksPrices[] = {45.99, 89.34, 12.23, 1000.3}; 
System.out.printf("%-20s%-30s%s\n", "Inventory Number", "Books", "Prices"); 
for (int i=0;i<books.length;i++){ 
    System.out.format("%-20d%-30s$%.2f%n", i, books[i], booksPrices[i]); 
} 

в результате:

Inventory Number Books       Prices 
0     This       $45.99 
1     That       $89.34 
2     The Other Longer One   $12.23 
3     Fourth One     $1000.30 
+0

+1 –

2

Вы можете использовать

System.out.printf(...) 

для форматирования выхода. Это использует

String.format(...) 

который использует

java.util.Formatter 

вы можете найти в документации here.

Для выравнивания простой строки, вы можете использовать следующее:

String formatted = String.format("%20s", str) 

это будет предварять

20 - str.length 

заготовок до фактической строки и возвращает проложенный String. Например, если ваша строка «Hello, World!» он будет предварять 11 заготовок:

"   Hello, World!" 

выровнять что-то к правой слева, вы должны предварять «-» перед номером, который указывает длину строки результата.

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

+0

Приоритет «-» выравнивается влево – laune

+0

Я исправил его. Спасибо @laune –

0

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

/** 
* Determines maximum length of all given strings. 
*/ 
public static int maxLength(int padding, String... array) { 
    if (array == null) return padding; 
    int len = 0; 
    for (String s : array) { 
     if (s == null) { 
      continue; 
     } 
     len = Math.max(len, s.length()); 
    } 
    return len + padding; 
} 

/** 
* Unifies array element lengths and appends 3 whitespaces for padding. 
*/ 
public static String[] format(String[] array) { 
    if (array == null || array.length == 0) return array; 
    int len = maxLength(3, array); 
    String[] newArray = new String[array.length]; 
    for (int i = 0; i < array.length; i++) { 
     newArray[i] = array[i]; 
     while (newArray[i].length() < len) { 
      newArray[i] += " "; 
     } 
    } 
    return newArray; 
} 
+0

Или вместо добавления пробельных символов вручную вы также можете использовать 'String.format ', как показал в своем ответе @ergonaut. – mezzodrinker

Смежные вопросы