题目描述
编写程序实现将一段文章格式化打印出来。打印时每行的长度为20个字符。
如果一行的最后一个单词超过了本行的20个字符的范围,则应把它移到下一行。
另外在每个单词之间增加一些空格,以便使每行的末尾准确地处在第20个位置处。
输入描述
输入n个单词(连续输入,每个单词不能超过20个字母,单词间用空格隔开,但不
要人为转行,也就是说如果输入的单词超过一行也不要按Enter)
输出描述
将上面n个单词分行打印,每行20个字符,如果一行只能放一个单词则单词后用空格填充,
编写程序实现将一段文章格式化打印出来。打印时每行的长度为20个字符。
如果一行的最后一个单词超过了本行的20个字符的范围,则应把它移到下一行。
另外在每个单词之间增加一些空格,以便使每行的末尾准确地处在第20个位置处。
输入描述
输入n个单词(连续输入,每个单词不能超过20个字母,单词间用空格隔开,但不
要人为转行,也就是说如果输入的单词超过一行也不要按Enter)
输出描述
将上面n个单词分行打印,每行20个字符,如果一行只能放一个单词则单词后用空格填充,
若一行可放多个单词,则末尾必须为单词,且一个单词不能跨行输出。
解题报告:
简单题,细心考虑到各种情况即可。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class N09TextForMat {
public static void main(String[] args) throws IOException {
BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
String s;
s=in.readLine();
String[] result=s.split(" ");
int[][] print=new int[result.length][s.length()];
int count =20;
int i,j=0,k=0;
for(i=0;i<result.length;i++){
if(result[i].length()>count){
String str=StrReturn(result,print[j],k);
System.out.println(str);
k=0;
j++;
count=20;
}
print[j][k++]=i;
count=count-(result[i].length()+1);
}
String str=StrReturn(result,print[j],k);
System.out.println(str);
}
private static String StrReturn(String[] result, int[] pri,int k) {
if(k==1){
return result[pri[0]];
}
int length=0;
String str = "";
for(int i=0;i<k;i++){
length+=result[pri[i]].length();
}
int differ=20-length;
int consult=differ/(k-1);
int remainder=differ%(k-1);
for(int i=0;i<k;i++){
str+=result[pri[i]];
if(i<k-1){
if(i<remainder){
for(int j=0;j<=consult;j++){
str+=" ";
}
}else{
for(int j=0;j<consult;j++){
str+=" ";
}
}
}
}
return str;
}
}