繁体   English   中英

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

[英]String padding based on length in Java

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

我想先打印行,然后根据行长打印一些空格,然后再打印objectCode。 (以便所有objectCode都对齐。

我试过了,但输出如下:

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()方法是我的问题……但是,我需要它才能执行程序打算执行的操作。

好吧,所以我想通了,想发布答案,以防其他人遇到这个问题。

因此,就像我说的那样,问题是我正在根据空格修剪行变量(以使行中的每个单词分开):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM