我想为Matrix类编写一个toString
方法,我需要返回一个包含矩阵的格式化字符串。矩阵中的条目长度差异很大,因此只需用TAB
分隔条目就不是技巧。现在我有以下内容:
public String toString(){
String str = "";
for(int i=0;i < _dim[0];i++){
for(int j=0;j < _dim[1];j++){
str += this.values[i][j] + "\t" + "\t";
}
str += "\n";
}
return str;
}
这给了我类似的东西。
3.2004951E7 -1.591328E7 17839.0
-35882.0 17841.0 -20.0
1794.0 -892.0 1.0
有没有办法打印这些正确对齐而不事先知道每个条目的长度?
感谢。
答案 0 :(得分:2)
有没有办法打印这些正确对齐而不知道 提高每个条目的持续时间?
我认为没有任何可用的内置库函数可以执行此类操作
为了我们。我们必须制作自己的格式,例如:%-xs
:
maxWidth[col]
以查找每列的最大宽度:列大小等于2D数组的列数。"%-"+maxWidth[col]+"s "
为每列创建格式化字符串,其中-
指定左对齐格式后的%
。示例代码:
String data[][] = {{3.2004951E7+"" , -1.591328E7+"", 17839.0+"" },
{-35882.0 +"" , -17841.0+"", -20.0+"" }};
int col = data[0].length;
int row = data.length;
int maxWidth[] = new int[col];
for(String[] rowD : data)
for(int i=0; i< col; i++)
{
if(maxWidth[i] < rowD[i].length())
maxWidth[i] = rowD[i].length();
}
String format = "";
for(int x : maxWidth)
format += "%-"+(x+2)+"s ";
format +="%n";
System.err.println(format);
for(String[] rowD : data)
{
System.out.printf(format, rowD);
}
<强>输出:强>
3.2004951E7 -1.591328E7 17839.0
-35882.0 -17841.0 -20.0
答案 1 :(得分:1)
如果您知道最长字符串的长度,可以使用String.format()
,我们称之为maxLength
。
public String toString(){
String str = "";
for(int i=0;i < _dim[0];i++){
for(int j=0;j < _dim[1];j++){
String value = String.valueOf(this.values[i][j]);
str += String.format("%1$-" + (max-value.length()) + "s", " ") + value + "\t";
}
str += "\n";
}
return str;
}