2013-11-25 3 views
3

Я пытаюсь напечатать несколько массивов в одном .txt-файле, имеющем один массив, а затем убрать другой столбец и распечатать другой массив, как я отформатирую это для работы?Как печатать столбцы в java txt-файле

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

private static void makeFile(String[] name, String[] nickname, String[] capital, 
      String[] flowers, String[] population) throws FileNotFoundException 
{ 
    PrintWriter out = new PrintWriter ("out.txt"); 

    for (int i = 0; i< 50 ; i++) 
     out.println(name[i] +" \t "+ nickname[i]); 

    out.close(); 
} 

Это то, что печатает

enter image description here

Как это исправить это так, что все они выровнены, и есть еще три столбца, чтобы добавить к этому, как мне заставить их выравниваться так же?

+0

Если выравнивание вопрос, я хотел бы предложить вам использовать фиксированную сумму допустимую длину в первом столбце, скажем, 50 или 60, то для каждой итерации, вычислить расстояние между их как 50 - длина имени –

+0

Как добавить последовательные столбцы после того, как первые 2 будут отформатированы одинаково? – dondon4720

ответ

-1

Проблема, с которой вы сталкиваетесь, заключается в том, что некоторые имена больше, чем вкладка, поэтому столбец перепутался, попробуйте вместо этого использовать два \ ts. Например. одна вкладка состоит из 8 символов, поэтому на другой вкладке все будет на что угодно меньше 8 символов.

6

Вы должны использовать String.format как

String.format("%-30s %s", name[i], nickname[i]) 

где 30 это максимальная длина имени.

5

Вы можете использовать printf вместо println, со строками формата C-стиля.

out.printf("%-16s%-24s\n", name[i], nickname[i]); 

Это будет печатать name[i] по левому краю в 16 символов заполнитель, а затем распечатать nickname[i] в широком столбце 24 символов. При добавлении большего количества столбцов вы можете указать максимальное количество символов в строке формата. Значок - добавлен для выравнивания строк слева.

0

Вы могли бы сделать что-то вроде этого

// Get the maximum length of any string in the array, or 0. 
private static int getMaxLength(String[] in) { 
    int c = 0; 
    if (in != null && in.length > 0) { 
    for (String i : in) { 
     i = (i != null) ? i.trim() : ""; 
     if (i.length() > c) { 
     c = i.length(); 
     } 
    } 
    } 
    return c; 
} 

// Pad any input string to the minimum length. 
private static String padString(String in, int min) { 
    in = (in != null) ? in.trim() : ""; 
    StringBuilder sb = new StringBuilder(in); 
    while (sb.length() < min) { 
    sb.append(' '); 
    } 
    return sb.toString(); 
} 

private static void makeFile(String[] name, 
    String[] nickname, String[] capital, 
    String[] flowers, String[] population) { 
    PrintWriter out = null; 
    try { 
    out = new PrintWriter("out.txt"); 

    // Add 1 to get at least 1 space between the maximum and the next item. 
    int namePadded = getMaxLength(name) + 1; 
    int nickPadded = getMaxLength(nickname) + 1; 
    int capitalPadded = getMaxLength(capital) + 1; 
    int flowersPadded = getMaxLength(flowers) + 1; 
    int populationPadded = getMaxLength(population); 

    for (int i = 0; i < name.length; i++) { 
     out.println(padString(name[i], namePadded) 
     + padString((nickname.length > i) ? nickname[i] 
       : "", nickPadded) 
     + padString((capital.length > i) ? capital[i] : "", 
      capitalPadded) 
     + padString((flowers.length > i) ? flowers[i] : "", 
      flowersPadded) 
     + padString((population.length > i) ? population[i] 
       : "", populationPadded)); 
    } 
    } catch (FileNotFoundException fnfe) { 
    fnfe.printStackTrace(System.err); 
    } finally { 
    out.close(); 
    } 
} 

public static void main(String[] args) { 
    String[] name = { "Alabama", "Alaska", "Arizona" }; 
    String[] nickname = { "Yellowhammer State", 
    "Last Frontier", "Grand Canyon State" }; 
    String[] capital = { 
    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "Y", "Z" }; 
    String[] flowers = { "Rose", "Carnation", "Orchid" }; 
    String[] population = { "1", "100", "1000" }; 
    makeFile(name, nickname, capital, flowers, 
    population); 
} 
Смежные вопросы