题目一:给定一个字符串,统计连续字符的个数,输出一个新的字符串。eg:abbbccd,输出:a1b3c2d1
解题:
public class stringTest {
public static String func(String str){
StringBuffer result = new StringBuffer();
if(str.length()==1){
result.append(str.charAt(0));
result.append("1");
}else{
result.append(str.charAt(0));
int c = 1;
for(int i=0; i<str.length()-1; i++){
if(str.charAt(i)==str.charAt(i+1)){
c++;
}else{
result.append(Integer.toString(c).toCharArray());
result.append(str.charAt(i+1));
c = 1;
}
}
result.append(Integer.toString(c).toCharArray());
}
return result.toString();
}
public static void main(String[] args){
String str = "aabbcdeee";
System.out.println(stringTest.func(str));
}
}
note:遍历指针为i,由于要用到i+1,考虑到charAt方法潜在越界可能,所以将情况分为两种:1、String的长度为1;2、String的长度大于1.
题目二:与题目一类似进行字符串的压缩,只是单个字符连续才压缩,如abcdabcdc无需压缩;待压缩字符串中不包含数字和转义符。
解析:与法一基本类似,只是在处理空指针异常时有些许不同
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String result = fun(s);
System.out.println(result);
}
private static String fun(String s) {
//为了防止因为空指针报错
s+="@";
StringBuilder sb = new StringBuilder("");
int count = 1;
if(s.length()==1){
return null;
}
for(int i=1;i<s.length();i++){
if(s.charAt(i)==s.charAt(i-1)){
count++;
}else{
if(count==1){
sb.append(s.charAt(i-1));
//count=1;
}else{
sb.append(count+""+s.charAt(i-1));
count=1;
}
}
}
return sb.toString();
}
}