Java 动态设置printf格式字符串中的字段宽度
我正在试着打印一张8字谜游戏的表格 我知道如何使用打印格式,即printf%2s。。等等,但我不确定如何根据正在播放的棋盘的大小(可能是3x3、5x5等)允许此更改 我可以通过编码获得最大数量的长度:Java 动态设置printf格式字符串中的字段宽度,java,format,Java,Format,我正在试着打印一张8字谜游戏的表格 我知道如何使用打印格式,即printf%2s。。等等,但我不确定如何根据正在播放的棋盘的大小(可能是3x3、5x5等)允许此更改 我可以通过编码获得最大数量的长度: String.valueOf(Side*Side - 1).length() 并将其存储在一个int中。然后如何获得该int来替换上面printf示例中的2 有更好的方法吗?谢谢。要将整数作为格式中的字段长度,只需将其作为字符串的一部分连接起来: int maxWidth = String.va
String.valueOf(Side*Side - 1).length()
并将其存储在一个int中。然后如何获得该int来替换上面printf示例中的2
有更好的方法吗?谢谢。要将整数作为格式中的字段长度,只需将其作为字符串的一部分连接起来:
int maxWidth = String.valueOf(Side*Side - 1).length();
printf( "%" + maxWidth + "s", .... );
格式化字符串与任何其他字符串一样。您需要的是动态构造一个模板字符串,并将所有内容放入其中。例如,对于3x3板,您可能需要模板%n\t%n\t%n\n%n\t%n\t%n\n%n\t%n\t%n,如果提供9个数字输入,该模板将在控制台上打印为3x3网格。要构造模板,请执行以下操作:
public String makeTemplate(size){
StringBuilder builder = new StringBuilder();
for(int i = 0;i < size;i++){
for(int i = 0;i < size-1;i++){
builder.append("%n\t");
}
builder.append("%n\n");
}
return builder.toString();
}
您是否尝试过动态构造模板字符串?这将为输出提供合适的模板。有更好的方法吗?当你说“更好”时,你在寻找什么?事实证明,我不需要根据电路板的输入大小更改表格表示法-要求我使用%3s格式化电路板。还是一件值得学习的事情。“你能澄清一下你的意思吗,@DavisBroda?”。我的意思是更简洁、清晰、高效。我在考虑使用像StringBuilder这样的东西,我从来没有使用过,但也读过一点关于它的东西!因此,使用String.formattemplate,numbers,它将使用存储在numbers[]中的数字填充模板%n个位置。凉的我不知道你能做到,谢谢
public void someMethod(){
int[] numbers = new int[9]; //fill in array with numbers
String template = makeTemplate(3);
String formatted = String.format(template,numbers);
System.out.println(formatted);
}