你如何在格式化中使用变量?

时间:2013-10-15 20:19:27

标签: java formatting

public static void main(String args[])
{

    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    scan.nextLine();
    String[] label = new String[n];
    int[] data = new int[n];


    for(int i=0; i<n*2; i++)
    {
        if (i<n)
        {
            label[i] = scan.nextLine();
        }
        if (i >= n)
        {
            data[i-n] = scan.nextInt();
        }
    }   

    for(int i=0; i<n; i++)
    {
        String a = "";
        for(int j=0; j<data[i]; j++)
        {
            a = a + "*";
            if(j==(data[i]-1)) System.out.println();
        }
        System.out.printf("%15s  %-7s", label[i], a);
    }
}

输入

5
Sidney
Washington DC
London
New York
The New City of a Lot of Letters
4
8
10
3
12

我无法弄清楚如何根据输入中的字母数量进行格式调整。如果我执行此代码,许多字母的新城市会混淆格式。如何在格式化的打印中使用变量值?

这是我想要的,除了最后一行的打印方式。代码应该打印到左边的flush。

enter image description here

3 个答案:

答案 0 :(得分:1)

System.out.printf("%15s  %-7s", label[i], a);

因为左边的缩进 15 许多字母的新城的长度为 32 ,因此无法正常工作。
%15s更改为%32s,它可以解决您的问题 修改
要根据输入更改缩进,请添加以下内容:

int length = 0;
for (int i = 0; i < label.length(); i++) {
    if (label[i].length() > length) {
        length = label[i].length();
    }
}

// do your stuff

System.out.printf("%" + length + "s  %-7s", label[i], a);

答案 1 :(得分:0)

目前尚不清楚问题是什么; length / padding说明符有助于对齐输出,但您需要考虑所有可能的输入。这意味着迭代数据,找到最大长度,并构造一个格式字符串,以某种方式使用该最大长度变量(例如,maxStringLength+5)来定义该特定列的宽度。

使用几个Java ASCII表库中的任何一个都可能更容易,例如,

答案 2 :(得分:0)

根据我在屏幕截图中看到的,您只需要动态计算左子字符串的宽度,如下所示:

private static void printLine(String strLeft, String strRight, int minLeftWidth){
    int width = strLeft.length() <= minLeftWidth ? minLeftWidth : strLeft.length();
    System.out.println(String.format("%"+width+"s   %-7s", strLeft, strRight));
}

然后,如果你调用这样的方法:

printLine("London", "*****", 15);
    printLine("Oslo", "************", 15);
    printLine("Paris", "**", 15);
    printLine("Some Really Freakishly Complex City Name", "**********", 15);

您应该获得所需的输出。当左侧字符串变得非常长时,我还会考虑包装城市名称以涵盖这些情况。

希望这会有所帮助。 干杯