我试图用4行文本居中,我正在寻找一个简单的解决方案。最终结果如下图所示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我试图用4行文本居中,我正在寻找一个简单的解决方案。最终结果如下图所示相关的知识,希望对你有一定的参考价值。
这就是我希望文本在格式化后的样子。
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]);
}
}
我试图通过弄清楚什么是最大的线并从那里通过从左边插入黑色空间来做到这一点。你能告诉我我做错了什么吗?
答案
您的代码存在一些问题:
- 您为5个字符串分配了内存,但只放了4个值。出于同样的原因,它导致
NullPointerException
。 - 我不明白参数
text
对函数的意义;它没有在任何地方使用,所以我删除它。 - 对文本居中的正确逻辑是找到最大长度字符串,然后找到要居中的字符串长度,然后使用以下公式计算要在字符串之前插入的空格数:
(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
以上是关于我试图用4行文本居中,我正在寻找一个简单的解决方案。最终结果如下图所示的主要内容,如果未能解决你的问题,请参考以下文章