题目描述
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。
例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
代码实现
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。
* 例如:输入2,8,“abc”,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
*
*/
public class SplitStringByInputNum {
public static void main(String[] args){
int m,n;
List<String> list;
Scanner cin=new Scanner(System.in);
while(cin.hasNext()){
list=new ArrayList<String>();
m=cin.nextInt();//输入m串字符串
n=cin.nextInt();//输出的字符串位数
for (int i = 0; i <m; i++) {
list.add(cin.next());
}
List<String> out=splitStr(list,n);
for (String string : out) {
System.out.print(string+" ");
}
}
}
/**
* @param list 输入字符串集合
* @param n 输出的字符串位数
* @return
*/
private static List<String> splitStr(List<String> list, int n) {
List<String> output=new ArrayList<String>();
for (String str : list) {
int len=str.length();
if(len<=n){//字符串长度小于等于n,补0
int zeroNum=n-len;//0的个数
String sb = fillZero(str,zeroNum);
output.add(sb);
}else {//字符串长度大于n,分割
String temp=str.substring(0, n);
String remainStr=str.substring(n, len);
int remainLen=remainStr.length();
output.add(temp);
while(remainLen>n){//切割一次后,剩余长度依然大于n
temp=remainStr.substring(0, n);
remainStr=temp.substring(n, temp.length());
remainLen=remainStr.length();
output.add(temp);
}
int zeroNum=n-remainLen;
String sb = fillZero(remainStr, zeroNum);
output.add(sb);
}
}
return output;
}
/**
* @param str 输入的短字符串
* @param zeroNum 要补0的个数
* @return 补0后的字符串
*/
private static String fillZero(String str, int zeroNum) {
StringBuilder sb=new StringBuilder(str);
for (int i = 0; i < zeroNum; i++) {
sb.append("0");
}
return sb.toString();
}
}
希望大家多多测试,找出不通过的测试用例,分享出来改进