Unk*_*ser 28 java tabs text-formatting
我有一个非常奇怪的问题.写完之后:
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());
}
Run Code Online (Sandbox Code Playgroud)
我看到这印:
see.txt File rw 267642728448
see1.txt File rw 267642728456
see2.txt File rw 267642728448
Run Code Online (Sandbox Code Playgroud)
为什么标签出现问题?
Mat*_*aun 32
基于这个问题,我使用以下代码来缩进我的消息:
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);
Run Code Online (Sandbox Code Playgroud)
这是输出:
short text: indented looooooooooooooong text: indented
Pét*_*rök 25
选项卡的"问题"是它们将文本缩进到固定的标签位置,通常是4或8个字符的倍数(取决于显示它们的控制台或编辑器).你的第一个文件名是7个字符,所以下一个标签在它结束后停在第8位.你的后续文件名是8个字符长,所以下一个标签停在第12位.
如果要确保列在同一位置得到很好的缩进,则需要考虑先前列的实际长度,并修改以下选项卡的数量,或者改为填充所需的空格数.后者可以使用例如System.out.printf
适当的格式规范来实现(例如,"%1$13s"
指定用于将第一个参数显示为字符串的最小宽度为13个字符).
你在每一行中提供的文本长度是不同的,这就是问题,所以如果第二个单词太长(see2.txt
长8个字符,对应一个标签长度),它会打印出一个标签,下一个制表点.解决它的一种方法是以编程方式向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);
Run Code Online (Sandbox Code Playgroud)
这个例子会给你这个印刷品:
test 1
test2 20
test3 5000
Run Code Online (Sandbox Code Playgroud)
继续Péter和邓肯的评论,我通常使用快速填充方法,类似于 -
public String rpad(String inStr, int finalLength)
{
return (inStr + " " // typically a sufficient length spaces string.
).substring(0, finalLength);
}
Run Code Online (Sandbox Code Playgroud)
同样,你可以有一个lpad()
,以及
归档时间: |
|
查看次数: |
189309 次 |
最近记录: |