Java 将字符串填充到任意长度的方法
我在计算如何填充从数组值打印的字符串时遇到问题。我认为我有一个很好的方法,但是它不能正确地读取x.length,所以我很好奇其他的方法,甚至是错误的解释Java 将字符串填充到任意长度的方法,java,arrays,string,padding,Java,Arrays,String,Padding,我在计算如何填充从数组值打印的字符串时遇到问题。我认为我有一个很好的方法,但是它不能正确地读取x.length,所以我很好奇其他的方法,甚至是错误的解释 import java.util.Scanner; //================================================================ public class Array { //---------------------------------------------------------
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();
}
}
}
其中-是我想用空格填充到任意长度的地方。换句话说,我希望我的打印数组部分能够打印每一行,并将空格添加到一个点。有没有可能为此制定一个方法?我还不太熟悉所有的java方法,因此非常感谢您的帮助。
如果这是一个重复的问题,我会很感激重定向到原来的,我会尝试删除这一个。也很抱歉给您带来不便。我假设您知道如何使用
StringBuilder
或字符串连接在左侧和右侧构建字符串
构建字符串后,可以使用下面的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);
}
//打印数组
对于(int row=0;row,您需要找到列大小的最大数目,并在每行中迭代到max column,如果长度小于实际行长度,则放置该值,否则为空格。
它将解决这个问题
我添加了更改后的代码:
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();
}
}
}
公共类数组{
//String result=String.format(“格式化方法是%s!”,“很棒”);
//系统输出打印项次(结果);
//----------------------------------------------------------------
专用静态扫描仪键盘=新扫描仪(System.in);
公共静态void main(字符串[]args){
//----------------------------------------------------------------
字符组,rLetter,字母;
字符串选择;
字符串str=“”;
双和=0;
int num=10;//用于测试
int行=10;
int列=8;
双平均=0;
int-S;
int-diff=0;
int totalChar=0;
int minLen=20;
字符串x=“”;
//创建二维阵列
System.out.print(“请输入行数:”);
行=键盘.nextInt();
Keyboard.nextLine();
double[]数字=新的double[行][num];
int maxSize=0;
for(int t=0;t最大大小){
maxSize=列;
}
图[t]=新的双[列];
}
//填充数组
对于(int row=0;row
所以在for循环中没有办法像我现在这样做吗?@user3505222,绝对有办法做到,但您没有提供一个完整的可编译程序,我可以尝试调试。此外,我假设您将使用for
循环,而不考虑构建字符串的左半部分,也可能是右半部分。平均值为sho最多使用多个小数,否则原始问题就解决了。@user3505222,您可以通过将%f
更改为%.2f
来编辑小数数。
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();
}
}
}