0

インデントを正しくしようとしています。以下のコードでは、s2 はデータベースから取得され、コンソール (System.out.println) に出力されます。実際、S2 はオブジェクトのリストであり、s2 はインデント付きの toString です。ただし、簡単にするために、次のコードを検討してください。

public class TestIndent
{
    public static void main(String[] args)
    {
        String s1 = "CASE NUM\tTYPE\tREF DATE\tAMOUNT";
        String s2 = "9157120183\tPPAQ\t*** REF DATE NOT EXISTS! ***\t$95.00";       

        System.out.println(s1);
        System.out.println(s2);
    }
}

この出力は次のようになります。

CASE NUM    TYPE    REF DATE    AMOUNT
9157120183  PPAQ    *** REF DATE NOT EXISTS! ***    $95.00

私の望みは、次のように正しくインデントすることです:

CASE NUM    TYPE    REF DATE                        AMOUNT
9157120183  PPAQ    *** REF DATE NOT EXISTS! ***    $95.00

「AMOUNT」が数字の真上にあることに注意してください (正しい場所です)。したがって、文字列の最大長に基づいてインデントするクラスを作成する直前に、この問題に対して何かが既に存在するかどうか疑問に思っていました。

4

2 に答える 2

1

タブ文字は単一の文字であり、環境によってレンダリングが異なるため、本質的に使いにくいです。コンソールで見栄えがよくても、私のコンソールでは見栄えがよく、8 文字幅のタブを持つ Lee Meador ではうんざりしたりする場合があります。

スペースを信頼できるため、ヘッダーにスペースを埋め込む関数を作成することで、Sotiriosの提案を使用できます。もちろん、コンソールが固定幅フォントを使用していない場合、これも信頼できませんが、より良いでしょう.

列を表示する幅がわかっている場合は、javas 組み込みの文字列形式を使用して手動計算の必要性を減らすこともできますが、長い値は切り捨てられます。たとえば、次のようになります。

System.out.printf("%-10.10s  %-6.6s %-30.30s %-10.10s%n", "CASE NUM", "TYPE", "REF DATE", "AMOUNT");
System.out.printf("%-10.10s  %-6.6s %-30.30s %-10.10s%n", "9157120183", "PPAQ", "*** REF DATE NOT EXISTS! ***", "$95.00");

または、出力タブを区切るかコンマで区切ってファイルに書き込み、これらをレンダリングするように設計されたプログラムに処理させることもできます。

于 2013-09-04T19:21:06.843 に答える
0

System.out.println()のタブの動作は、基盤となる OS によって異なります。より詳細な制御が必要な場合 (特に、OS でそれが提供されていない場合) は、何らかのアルゴリズム (固定間隔タブまたは可変間隔タブ) に従って Java プログラム内のスペースに置き換えることをお勧めします。

もう 1 つの方法は、タブを出力のままにして、ファイルにリダイレクトすることです。次に、タブ サイズを制御できるツールを使用してファイルを開きます。もちろん、これはOSに依存します。

于 2013-09-04T19:17:50.140 に答える