Java 枚举中的等间距?
我在上Java课,这一节是关于枚举的。我的枚举中有以下内容:Java 枚举中的等间距?,java,enums,enumeration,Java,Enums,Enumeration,我在上Java课,这一节是关于枚举的。我的枚举中有以下内容: public enum tuna { Camaro("Orange", "1968"), Silverado("Red","1996"), Sierra("Black","2007"), Equinox("Silver","2011"); private final String color; private final String year; tuna(String carColor, String age)
public enum tuna {
Camaro("Orange", "1968"),
Silverado("Red","1996"),
Sierra("Black","2007"),
Equinox("Silver","2011");
private final String color;
private final String year;
tuna(String carColor, String age){
color = carColor;
year = age;
}
public String getColor(){
return color;
}
public String getYear(){
return year;
}
}
在我的Java类中,这是打印出来的:
for(tuna cars: tuna.values()){
System.out.printf("%s\t\t%s\t\t%s\n", cars, cars.getColor(), cars.getYear()
打印出:
看看右边的红色和1996年的Silverado,因为Silverado比其他单词长?
那么,我如何修复它,使长单词的细节与其他单词的间距相等
另外,如果我把Silverado缩短为Silver,这是正常的:
制表符\t将光标向前移动,直到它到达一个可被制表符大小整除的位置:如果大小为8,它将变为0、8、16、24等。由于Silverado的长度为9个字符,这将导致值为16,而不是8
您必须自己进行制表:根据前面字符串的长度添加空格,而不是使用\t
如果您想要最简单的解决方案,请为每个字段确定一个合适的最大长度,并在此基础上计算您的制表符,可以选择删除比此长度更长的字符串
对于动态解决方案,您必须根据可用项目检查所需的最大长度。这允许您获得所需的最小间距。这是一个制表符间距问题-如果您在文本编辑器中以这种方式使用制表符,您将获得相同的间距。对于最大/最小长度相差>4个字符的变量(如第一列),请插入2个选项卡,而不是这样的选项卡:
for(tuna cars: tuna.values()){
if (cars.getColor().length() > 5)
System.out.printf("%s\t%s\t\t%s\n", cars, cars.getColor(), cars.getYear())
else
System.out.printf("%s\t\t%s\t\t%s\n", cars, cars.getColor(), cars.getYear())
更新已更正,仅输出颜色不够长的两个选项卡。我建议不要使用选项卡,而是使用字符串格式,即使用System.out.format。。。并通过获取最长名称的长度来计算每个格式说明符的长度。然后动态构建格式字符串 例如:
//that's a shortcut, you'd have to calculate the max
int maxlength = tuna.Silverado.name().length();
for( tuna t : tuna.values() ) {
System.out.format( "%-" + maxlength + "s %-10s %4s\n", t.name(), t.getColor(), t.getYear() );
}
输出:
Camaro Orange 1968
Silverado Red 1996
Sierra Black 2007
Equinox Silver 2011
不要使用标签。而是更好地使用printf,通过在%s字段中使用int常量来最大化其灵活性。i、 例如,%10s或%-10s或任何int常量最适合该列。这与枚举无关。唯一重要的是这一行:
System.out.printf("%s\t%s\t\t%s\n", cars, cars.getColor(), cars.getYear()
你需要的是字符串填充。您可以使用System.out.format方法,该方法允许以%5s的形式填充字符串,这意味着它将把字符串填充到左侧最多5个空格
因此,您可以计算字段的最大长度并动态构建格式字符串:
int maxCars = 0;
int maxColor = 0;
int maxYear = 0;
for(tuna cars: tuna.values()) {
maxCars = Math.max(maxCars, cars.toString().length());
maxColor = Math.max(maxColor, cars.getColor().length());
maxYear = Math.max(maxYear, cars.getYear().length());
}
String formatStr = "%"+(maxCars+5)+"s%"+(maxColor+5)+"s%"+(maxYear+5)+"s\n";
for(tuna cars: tuna.values())
System.out.format(formatStr, cars, cars.getColor(), cars.getYear());
输出为:
Camaro Orange 1968
Silverado Red 1996
Sierra Black 2007
Equinox Silver 2011
只是一个样式点-类应该总是以大写字母开头,并遵循CamelCase格式。在你最喜欢的百科全书中查找制表器的概念。制表器仍然不可靠。一个更好的解决方案是在%s字段中使用数字常量来最大限度地利用printf。如果我将你的代码复制/粘贴到我的代码中,看看它是否能修复它,它看起来是这样的:为什么标签不可靠?如果使用得当,它们是完全可预测的,用于像这样缩进我们的输出!与使用空格相比,需要的逻辑更少。