Подтвердить что ты не робот

Есть ли простой способ вывода двух столбцов на консоль в Java?

Как гласит название, есть ли простой способ вывода двух столбцов в консоль на Java?

Я знаю \t, но я не нашел путь к пространству на основе определенного столбца при использовании printf.

4b9b3361

Ответ 1

Используйте спецификаторы ширины и точности, заданные для одного и того же значения. Это приведет к слишком коротким строкам и усечению строк, которые слишком велики. Флаг '-' будет выравнивать значения в столбцах.

System.out.printf("%-30.30s  %-30.30s%n", v1, v2);

Ответ 2

Я сделал это без использования класса Formatter как:

 
System.out.printf("%-10s %-10s %-10s\n", "osne", "two", "thredsfe");
System.out.printf("%-10s %-10s %-10s\n", "one", "tdsfwo", "thsdfree");
System.out.printf("%-10s %-10s %-10s\n", "onsdfe", "twdfo", "three");
System.out.printf("%-10s %-10s %-10s\n", "odsfne", "twsdfo", "thdfree");
System.out.printf("%-10s %-10s %-10s\n", "osdne", "twdfo", "three");
System.out.printf("%-10s %-10s %-10s\n", "odsfne", "tdfwo", "three");

и вывод был

osne       two        thredsfe  
one        tdsfwo     thsdfree  
onsdfe     twdfo      three     
odsfne     twsdfo     thdfree   
osdne      twdfo      three     
odsfne     tdfwo      three     

Ответ 3

Поздний ответ, но если вы не хотите жестко кодировать ширину, как насчет того, что работает так:

    public static void main(String[] args) {
        new Columns()
         .addLine("One", "Two", "Three", "Four")
         .addLine("1", "2", "3", "4")
         .print()
         ;
    }

И отображает:

One Two Three Four 
1   2   3     4    

Ну все, что требуется:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;  

public class Columns {

    List<List<String>> lines = new ArrayList<>();
    List<Integer> maxLengths = new ArrayList<>();
    int numColumns = -1;

    public Columns addLine(String... line) {

        if (numColumns == -1){
            numColumns = line.length;
            for(int i = 0; i < numColumns; i++) {
                maxLengths.add(0);
            }
        }

        if (numColumns != line.length) {
            throw new IllegalArgumentException();
        }

        for(int i = 0; i < numColumns; i++) {
            maxLengths.set(  i, Math.max( maxLengths.get(i), line[i].length() )  );
        }

        lines.add( Arrays.asList(line) );

        return this;
    }

    public void print(){
        System.out.println( toString() );
    }

    public String toString(){
        String result = "";
        for(List<String> line : lines) {
            for(int i = 0; i < numColumns; i++) {
                result += pad( line.get(i), maxLengths.get(i) + 1 );                
            }
            result += System.lineSeparator();
        }
        return result;
    }

    private String pad(String word, int newLength){
        while (word.length() < newLength) {
            word += " ";            
        }       
        return word;
    }
}

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