如题:
解析:有一个字符串,有一个int的数组,数组各下标的值的和等于字符串的长度,按照数组的下标截取字符串,sublen[0]值为3,截取的第一个子串的长度就是3,也就是substring(0, 3),原字符串去掉前3个。以此类推截取完,原字符串也就被截成了sublen.length个子字符串,然后2k-1个子串与第2k个子串调换,即1和2换,3和4换,如果子串的数量是奇数,最后一个位置不变。位置交换完毕后,各子串按照顺序拼接成一个新的字符串。所以就有:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author asus
* @date 2020/08/16
*/
public class Solution {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr = {3, 2, 2, 1, 1};
reformatString("abcdefghi", arr);
}
/**
* @param str:
* the original string
* @param sublen:
* an integer array
* @return: the new string
*/
private static String reformatString(String str, int[] sublen) {
//计算数组的元素和
int sum = 0;
for (int i : sublen) {
sum = sum + i;
}
List<String> sL = new ArrayList<String>(16);
if (sum == str.length()) {
int l = sublen.length;
// sublen[i]表示第i+1个子串的长度
for (int i = 0; i < l; i++) {
String e = str.substring(0, sublen[i]);
str = str.substring(sublen[i], str.length());
sL.add(e);
}
// 将第2k-1个子串与第2k个子串调换,若有奇数组,则最后一个不变
int lSize = sL.size();
if (lSize % 2 != 0) {
lSize--;
}
for (int i = 0; i < lSize; i++) {
if (i < lSize - 1 && i % 2 == 0) {
//交换位置
Collections.swap(sL, i, i + 1);
}
}
}
StringBuffer b = new StringBuffer();
for (String s : sL) {
b.append(s);
}
System.out.print(b.toString());
return b.toString();
}
}
`