【题目】给定一个字符串str,返回str的统计字符串。例如“aaabbadddffc”的统计字符串为“a_3_b_2_a_1_d_3_f_2_c_1”。
【补充题目】给定一个字符串的统计字符串,再给定一个整数index,返回cstr所代表的原始字符串上的第index个字符。例如,“a_1_b_100”所代表的原始字符串上第0个字符是‘a’,第50个字符是‘b’。
/*
* 给定一个字符串str,返回str的统计字符串。例如“aaabbadddffc”的统计字符串 为“a_3_b_2_a_1_d_3_f_2_c_1”。
*/
public class ConcatStr {
public static String concatStr(String str) {
if (str == null || str.equals("")) {
return str;
}
char[] chas = str.toCharArray();
String res = String.valueOf(chas[0]);
int num = 1;
for (int i = 1; i < chas.length; i++) {
if (chas[i] != chas[i - 1]) {
res = concat(res, String.valueOf(num), String.valueOf(chas[i]));
num = 1;
} else {
num++;
}
}
return concat(res, String.valueOf(num), "");
}
public static String concat(String s1, String s2, String s3) {
return s1 + "_" + s2 + (s3.equals("") ? s3 : "_" + s3);
}
/*
* 补充题目:给定一个字符串的统计字符串,再给定一个整数index, 返回cstr所代表的原始字符串上的第index个字符。
* 例如,“a_1_b_100”所代表的原始字符串上第0个字符是‘a’,第50个字符是‘b’。
*/
public static char getCharAt(String str, int index) {
if (str == null || str.equals("")) {
return 0;
}
char[] chas = str.toCharArray();
int num = 0;
int sum = 0;
boolean flag = true;
char cur = 0;
for (int i = 0; i < chas.length; i++) {
if (chas[i] == '_') {
flag = !flag;
} else if (flag) {
sum += num;
if (sum > index) {
return cur;
}
cur = chas[i];
num = 0;
} else {
num = num * 10 + chas[i] - '0';
}
}
return sum + num > index ? cur : 0;
}
}