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

问题描述 投票:-1回答:1

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]);
        }

}

我试图通过弄清楚什么是最大的线并从那里通过从左边插入黑色空间来做到这一点。你能告诉我我做错了什么吗?

java arrays string text
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.