0

したがって、2 つの文字列 (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

2番目に試したのは(最後の努力として):

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

ここでのトリム()メソッドは私の問題だと思います...しかし、プログラムが意図していることを実行するために必要です。

4

1 に答える 1

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

これは、行 (%30s) に 30 個のスペースを割り当てたときにスペースが考慮されていないためです。

この問題を解決するには、行自体をフォーマットする代わりに、行内の各単語をフォーマットする必要がありました。

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
于 2015-04-12T17:02:45.863 に答える