我正在尝试以4行为文本居中,我正在寻找一个简单的解决方案。最终结果在下图中

时间:2018-11-11 12:12:53

标签: java arrays string text

Text centered

这是我希望文本在格式化后的外观。

static void printCentered(String text) {
    String[] textArray;
    int maxi = -1;
    textArray = new String[5];
    textArray[0] = "Drei Chinesen mit dem Kontrabass";
    textArray[1] = "sassen auf der Strasse und erzaehlten sich was.";
    textArray[2] = "Da kam ein Mann: Ja was ist denn das?";
    textArray[3] = "Drei Chinesen mit dem Kontrabass.";
    for (int i = 0; i <= 4; i++)
        if (textArray[i].length() > maxi)
            maxi=textArray[i].length();
    for(int i=0; i<= 4; i++)
        if (maxi-textArray[i].length()!=0)
        {
            int diff=maxi-textArray[i].length();
            System.out.print(" ");
            System.out.println(textArray[i]);
        }

}

我只是通过找出最大的行并从左边插入黑色空格来尝试做到这一点。 你能告诉我我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题:

  1. 您为5个字符串分配了内存,但只放置了4个值。出于相同的原因,它导致了NullPointerException
  2. 我不了解参数text对函数的重要性;它没有在任何地方使用,所以我将其删除。
  3. 居中文本的正确逻辑是找到最大长度的字符串,然后找到要居中的字符串的长度,然后使用以下公式计算要在字符串之前插入的空格数: (maxLen / 2) - (textLen / 2)

代码如下:

    static void printCentered() {
        String[] textArray = new String[5];
        int maxi = -1;
        textArray[0] = "Drei Chinesen mit dem Kontrabass";
        textArray[1] = "sassen auf der Strasse und erzaehlten sich was.";
        textArray[2] = "Da kam ein Mann: Ja was ist denn das?";
        textArray[3] = "Drei Chinesen mit dem Kontrabass.";
        textArray[4] = "Hello World!";
        for (int i = 0; i <= 4; i++)
            if (textArray[i].length() > maxi)
                 maxi = textArray[i].length();
        final int maxiByTwo = maxi / 2;
        for (int i = 0; i <= 4; i++) {
            final int textLenByTwo = textArray[i].length() / 2;
            final int diff = maxiByTwo - textLenByTwo;
            for (int j = 0; j < diff; j++)
                System.out.print(" ");
            System.out.println(textArray[i]);
        }
    }

以下是工作代码的链接:https://ideone.com/QiNIu1