Vertical Text Printing (Java)
Yes, I think there is more straightforward ways to implement this:


Compute the length of the largest string.
Create a 2D char[][] matrix with the amount of rows equal to the length of the largest string. The amount of "columns" depends how much space you want between two neighbour columns.
Fill out the matrix with characters.
Create a StringBuilder and fill it with the chars from the matrix.


All in all

I had this in mind:

private static final int DEFAULT_COLUMN_SPACING = 2;

public static String makeVerticalText(List&lt;String&gt; lines) {
    return makeVerticalText(lines, DEFAULT_COLUMN_SPACING);
}

public static String makeVerticalText(List&lt;String&gt; lines, 
                                      int columnSpacing) {
    if (lines.isEmpty()) {
        return "";
    }

    int maximumLength = lines.stream()
                             .max(Comparator.comparing(String::length))
                             .get()
                             .length();

    char[][] matrix = new char[maximumLength]
                              [(columnSpacing + 1) * lines.size()
                              - columnSpacing];
    int columnIndex = 0;

    for (String line : lines) {
        int rowIndex = 0;

        for (char c : line.toCharArray()) {
            matrix[rowIndex++][columnIndex] = c;
        }

        columnIndex += 1 + columnSpacing;
    }

    int numberOfColumns = matrix[0].length;
    StringBuilder sb = 
            new StringBuilder(maximumLength * (matrix[0].length + 1));

    for (int rowIndex = 0; rowIndex &lt; maximumLength; ++rowIndex) {
        for (columnIndex = 0; columnIndex &lt; numberOfColumns; ++columnIndex) {
            char currentChar = matrix[rowIndex][columnIndex];
            sb.append(currentChar == '\u0000' ? ' ' : currentChar);
        }

        if (rowIndex &lt; maximumLength - 1) {
            sb.append('\n');
        }
    }

    return sb.toString();
}


Hope that helps.