私には非常に奇妙な問題があります。これを書いた後:
for (File f : currentFile.listFiles()) {
if (f.isDirectory()){
System.out.println(f.getName()+"\t"+"Dir\t"+Command.getpremission(f)+"\t"+f.getTotalSpace());
}
else{
System.out.println(f.getName()+"\t"+"File\t"+Command.getpremission(f)+"\t"+f.getTotalSpace());
}
私はこれが印刷されているのを見ます:
see.txt File rw 267642728448
see1.txt File rw 267642728456
see2.txt File rw 267642728448
タブに問題があるのはなぜですか?
この質問 に基づいて、次のコードを使用してメッセージをインデントします。
String prefix1 = "short text:";
String prefix2 = "looooooooooooooong text:";
String msg = "indented";
/*
* The second string begins after 40 characters. The dash means that the
* first string is left-justified.
*/
String format = "%-40s%s%n";
System.out.printf(format, prefix1, msg);
System.out.printf(format, prefix2, msg);
これは出力です:
短いテキスト:インデント looooooooooooooongテキスト:インデント
タブの「問題」は、テキストを固定タブ位置、通常は4文字または8文字の倍数(それらを表示するコンソールまたはエディターに応じて)にインデントすることです。最初のファイル名は7文字なので、終了後の次のタブストップは8桁目になります。ただし、後続のファイル名は8文字長なので、次のタブストップは12桁目になります。
列が同じ位置でうまくインデントされるようにしたい場合は、前の列の実際の長さを考慮し、次のタブの数を変更するか、代わりに必要な数のスペースを埋め込む必要があります。後者は、たとえば System.out.printf
適切な 形式仕様 (例:"%1$13s"
は、最初の引数を文字列として表示するための最小幅13文字を指定します。
各行で提供するテキストの長さが異なるため、これが問題です。したがって、2番目のWordが長すぎる場合(_see2.txt
_は8文字で、1つのタブの長さに対応する)、次の集計ポイントに移動するタブ。これを解決する1つの方法は、プログラムでパッドをf.getName()
テキストに追加して、生成される各テキスト:_see.txt
_または_see2.txt
_が同じ長さ(たとえば_see.txt_
_ _see2.txt
_)各タブが自動的に同じ集計ポイントに移動します。
JDK 1.5で開発している場合は、 Java.util.Formatter を使用してこれを解決できます。
_String format = "%-20s %5d\n";
System.out.format(format, "test", 1);
System.out.format(format, "test2", 20);
System.out.format(format, "test3", 5000);
_
この例はあなたにこのプリントを与えます:
_test 1
test2 20
test3 5000
_
Péterとduncanによるコメントの続きでは、通常、次のようなクイックパディングメソッドを使用します。
_public String rpad(String inStr, int finalLength)
{
return (inStr + " " // typically a sufficient length spaces string.
).substring(0, finalLength);
}
_
同様に、lpad()
も持つことができます
他の人が述べたように、文字列の可変長が問題です。
Apache Commonsは、車輪を再発明するのではなく、StringUtilsでこれを実現する、すてきできれいなソリューションを提供しています。
StringUtils.rightPad("String to extend",100); //100 is the length you want to pad out to.
問題は、ファイル名の長さです。最初のファイル名の長さは7文字しかないため、タブは8文字目になります(4文字ごとにタブを実行します)。ただし、次のファイル名は8文字なので、次のタブは12文字までです。また、ファイル名が11文字を超える場合は、同じ問題が再度発生します。
この例を使用して問題を処理できます。
System.out.printf( "%-15s %15s %n", "name", "lastname");
System.out.printf( "%-15s %15s %n", "Bill", "Smith");
ニーズを満たす適切な配置が見つかるまで、「%」で遊ぶことができます
Guavaの Strings.padEnd(String input、int minLength、char padding) を使用して、必要な長さに文字列を埋め込むこともできます