基于Java的长度的字符串填充

时间:2015-04-11 19:53:42

标签: java string format pad

所以,我有两个字符串(line和objectCode)

我想首先打印行,然后根据行的长度打印一些空格,然后打印objectCode。 (这样所有的objectCodes都排成一行。

我试过了,但输出如下:

0000    FIRST   ST      RETADR,LX    172028
0003            LD      BX,#LENGTH    692028
0006    CLOOP   +JSUB   RDREC    03100000

objectCode是每一行中的最后一个数字(172028),因为你可以看到它们没有像我希望的那样排列。

所以,从本质上讲,我想要的是:

0000    FIRST   ST      RETADR,LX    172028
0003            LD      BX,#LENGTH   692028
0006    CLOOP   +JSUB   RDREC        03100000

我似乎无法弄清楚如何获得它。谢谢。

修改

我尝试过:

首先尝试(这应该是有用的):

String write = String.format("%-45s%s", line, objectCode);
fw.write(write + "\n"); //Using a FileWriter

第二次我尝试了(作为最后的努力):

fw.write(line);
int numOfSpaces = 40 - line.length(); //arbitrary number to check if this works
for (int spaces = 0; spaces < numOfSpaces; spaces++) {
    fw.write(" ");
}
fw.write(objectCode);

我认为它会为更长的线长打印更少的空间..但它似乎没有用。

修改

我已经找到了问题,但我不知道如何解决它。

问题是在程序的早期我修剪了每个线变量(修剪了前面和后面的空白区域),所以我可以自己得到每个单词。

所以,我有:

line = input.nextLine();
words[] = line.trim().split("\\s+"); //Splitting by white space

我认为trim()方法在这里是我的问题......但是,我需要它才能完成程序的目的。

1 个答案:

答案 0 :(得分:0)

好吧所以我想出来并想发布答案以防其他人遇到这个问题。

所以,就像我说的那样,问题是我正在根据空白修剪线变量(为了让行中的每个单词分开):

String line = input.next
String[] words = line.trim().split("\\s+"); //Get each word by itself

问题是在程序的后期我想在这一行之后打印一些东西。并且没有办法获得正确的线条长度,因为所有的空格都消失了:

0000    FIRST     ST        RETADR,LX  //line.length = 20 (no whitespace)
0003              LD        BX,#LENGTH //line.length = 16 (no whitespace)

这两行都没有考虑长度上的任何空格。所以当我在这样的行之后写一些东西(使用文件编写器)

String write = String.format("%-30s, %s", line, objectCode);
fw.write(write + "\n");

我会得到:

0000    FIRST     ST        RETADR,LX       172028
0003              LD        BX,#LENGTH            692028

这是因为当我为行分配30个空格(%30s)时,不考虑空格。

要解决这个问题,我不得不格式化行本身,我会格式化行中的每个单词:

String write = String.format("%-10s%-10s%-10s%-10s%", word1, word2, word3, word4);
fw.write(write + "\t" + objectCode + "\n");

所以现在这实际上给了我想要的东西,因为每条线都分配了相同的空间,并且它们保持对齐(-10s%等等)。

0000    FIRST     ST        RETADR,LX   172028
0003              LD        BX,#LENGTH  692028