例如:
原文:a 编码后:a
原文:aaaabc 编码后:a4bc
原文:aaaabcccde 编码后:a4bc3de
实现如下:
public class work001 {
public String strCompress(String str){
boolean flag=false;
if(str==null||str.isEmpty())
{
System.out.println("null或者空");
return null;
}
else {
char test=str.charAt(0);
StringBuffer mystr=new StringBuffer();
int count=1;
for(int i=1;i<str.length();i++) {
if(test==str.charAt(i))
count++;
else {
mystr.append(test);
if(count>1)
{
mystr.append(count);
flag=true;
}
test=str.charAt(i);
count=1;
}
}
mystr.append(test);//请不要忘记最后的字母呀
if(count>1)
{
mystr.append(count);
flag=true;
}
//if(mystr.length()>=str.length())//非正确的判断
if(flag)
{
System.out.println("mystr.length()="+mystr.length());
System.out.println("mystr.toString()="+mystr.toString());
return mystr.toString();
}
else {
System.out.println("未发生改变:"+str);
return str;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
work001 compress=new work001();
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println(compress.strCompress(s));
}
}
跑代码的时候特别有意思,发现有的测试样例能跑过去有的不可以,后来发现是判断条件不对