题目要求
题目分析
假设num表示每一列的字符个数
Java输出的时候是一行一行输出而不是一列一列的,所以应该求出每一行的字符排列。因为字符串的最后一个字符是在第一列,所以需要提前考虑用空格将字符串填充成为能够整除num的长度。填充的个数是num - string.length() % num,但是应该注意,只有string.length() % num不等于0的时候才需要补充。
如图所示,按照4个一列的方式排列,第一行从后往前排列依次是T、[空格]、a、s、a,但是T应该是第一行最后一个被输出的,是倒排。所以可以考虑使用StringBuffer的insert方法,将取到的字符依次往前放。
每找到一行之后,就使得游标往后移动一位,按照上面的方法继续找。
示例代码
import java.util.Scanner;
public class L1_039 {
public static void main(String[] args) {
//接收输入数据
Scanner input = new Scanner(System.in);
int num = input.nextInt();
input.nextLine();
String str = input.nextLine();
input.close();
//填补字符串
String string = null;
if(str.length() % num != 0) {
string = replenishString((num - (str.length() % num)), str);
} else {
string = str;
}
int length = string.length();
// StringBuffer str_oldStyle = new StringBuffer();
for(int nonius = 0; nonius < num; nonius++) {
StringBuffer str_line = new StringBuffer();
for(int i = nonius; i < length; i += num) {
str_line.insert(0, string.charAt(i));
}
System.out.println(str_line);
// str_oldStyle.append(str_line);
// str_oldStyle.append("\n");
}
// System.out.println(str_oldStyle);
}
/**
*
* @Title: replenishString
* @Description: 给string字符串后面填补number个空格字符
* @param number
* @param string
* @return 填补后的字符串
*/
public static String replenishString(int number, String string) {
StringBuffer str = new StringBuffer(string);
for(int i = 0; i < number; i++) {
str.append(" ");
}
return str.toString();
}
}
说明:之前试图使用一个StringBuffer接收所有行,每次后面用转义字符插入一个换行符,但是这样做就必须保证最后一次不会继续换行。