[英]Method for padding string up to an arbitrary length
我在弄清楚如何填充從數組值打印的字符串時遇到問題。 我以為我有一個很好的方法,但是它不能正確讀取x.length,因此我很好奇其他方法甚至是對該錯誤的解釋。
import java.util.Scanner;
//================================================================
public class Array {
//----------------------------------------------------------------
private static Scanner Keyboard = new Scanner(System.in);
public static void main(String[] args) {
//----------------------------------------------------------------
char group, rLetter,letter;
String choice ;
String str = " ";
double sum = 0;
int num = 10; // for test
int rows = 10;
int columns = 8;
double average = 0;
int S;
int diff = 0;
int totalChar=0;
int minLen = 20;
String x= "";
// creating 2d array
System.out.print("Please enter number of rows : ");
rows = Keyboard.nextInt();
Keyboard.nextLine();
double[][] figures = new double[rows][num];
for(int t = 0; t < rows; t++) {
rLetter = (char)((t)+'A');
System.out.print("Please enter number of positions in row " + rLetter + " : ");
columns = Keyboard.nextInt();
Keyboard.nextLine();
figures[t] = new double[columns];
}
// filling the array
for(int row = 0; row < figures.length; ++row) {
for(int col = 0; col < figures[row].length; ++col) {
figures[row][col] = 0.0;
}
}
// printing the array
for(int row=0; row<figures.length; ++row) {
// printing data row
group = (char)((row)+(int)'A');
System.out.print(group+" : ");
for(int col=0; col<figures[row].length; ++col) {
sum += figures[row][col];
average = sum/figures[row].length;
x = " "+figures[row][col];
diff = minLen - x.length();
System.out.printf("%1$" + diff + "s", x);
System.out.print(" ");
}
System.out.print("["+average+"]");
System.out.println();
}
}
}
我想產生一個看起來像這樣的表:
A: 0.0 0.0 0.0 - [ 0.0, 0.0]
B: 0.0 0.0 0.0 0.0 - [ 0.0, 0.0]
C: 0.0 0.0 0.0 0.0 0.0 - [ 0.0, 0.0]
我想在其中-填滿空格直到任意長度的地方。 換句話說,我希望我的打印數組部分能夠打印每行並添加最多一個點的空格。 有可能為此制定一種方法嗎? 我還不熟悉所有的Java方法,因此不勝感激。 如果這是重復的問題,請您重定向到原始版本,然后嘗試刪除它。 對於給您帶來的不便也表示抱歉。
我假設您知道如何使用StringBuilder
或String串聯在左側和右側構建字符串。
構建完字符串后,可以使用以下printf
將右側的輸出填充到所需的任意空白字符。 在下面的示例代碼中,我使用20
作為要填充的字符數。
public class Pad {
public static void main(String[] args) {
String a = "0.0 0.0 0.0 ";
String b = "0.0 0.0 0.0 0.0";
String c = "[ 0.0, 0.0]";
System.out.printf("%-20s %s\n", a, c);
System.out.printf("%-20s %s\n", b, c);
}
}
您可以在上面的代碼中使用以下思路來替換上一個循環:
// printing the array
for(int row=0; row<figures.length; ++row) {
// printing data row
StringBuilder sb = new StringBuilder();
group = (char)((row)+(int)'A');
sb.append(group+" : ");
for(int col=0; col<figures[row].length; ++col) {
sum += figures[row][col];
average = sum/figures[row].length;
x = " "+figures[row][col];
diff = minLen - x.length();
sb.append(String.format("%1$" + diff + "s", x));
sb.append(" ");
}
System.out.printf("%-75s[%f]\n", sb.toString(), average);
}
您需要找到最大的列大小數,並在每行中迭代直到max列,如果長度小於實際行長,則放置該值,否則小於空白。 它將解決問題。
我添加了更改的代碼:
public class Array {
// String result = String.format("The format method is %s!", "great");
// System.out.println(result);
//----------------------------------------------------------------
private static Scanner Keyboard = new Scanner(System.in);
public static void main(String[] args) {
//----------------------------------------------------------------
char group, rLetter, letter;
String choice;
String str = " ";
double sum = 0;
int num = 10; // for test
int rows = 10;
int columns = 8;
double average = 0;
int S;
int diff = 0;
int totalChar = 0;
int minLen = 20;
String x = "";
// creating 2d array
System.out.print("Please enter number of rows : ");
rows = Keyboard.nextInt();
Keyboard.nextLine();
double[][] figures = new double[rows][num];
int maxSize = 0;
for (int t = 0; t < rows; t++) {
rLetter = (char) ((t) + 'A');
System.out.print("Please enter number of positions in row " + rLetter + " : ");
columns = Keyboard.nextInt();
Keyboard.nextLine();
if (columns > maxSize) {
maxSize = columns;
}
figures[t] = new double[columns];
}
// filling the array
for (int row = 0; row < figures.length; ++row) {
for (int col = 0; col < figures[row].length; ++col) {
figures[row][col] = 0.0;
}
}
// printing the array
for (int row = 0; row < figures.length; ++row) {
// printing data row
group = (char) ((row) + (int) 'A');
System.out.print(group + " : ");
for (int col = 0; col < maxSize; ++col) {
if (col < figures[row].length) {
sum += figures[row][col];
average = sum / figures[row].length;
x = " " + figures[row][col];
diff = minLen - x.length();
System.out.printf("%1$" + diff + "s", x);
System.out.print(" ");
} else {
System.out.print(" ");
}
}
System.out.print("[" + average + "]");
System.out.println();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.