有字符串 aaaabbbbccdeaa,要求输出为a4b4c2d1e1a2,我写的方法无法处理最后的那两个a,请高手指教! 
public static void main(String[] args) { 
String str = "aaaabbbbcdeaa"; 
char[] ss = str.toCharArray(); 
String s=""; 
char j; for (j = 'a'; j < 'z'; j++) { 
int count = 0; 
for (int i = 0; i < ss.length ; i++) { 
if (ss[i] == j) { 
count += 1; 
} } 
if(count!=0){ 
String sss=j+String.valueOf(count); s+=sss; 


System.out.println(s); }

解决方案 »

  1.   

    /**
     * 简单的压缩算法实现。<br>
     * 以字符加出现的次数进行压缩,比如输入为<br>
     * aaaabbbbccdeaa<br>
     * 输出为<br>
     * a4b4c2d1e1a2
     * 
     * @author Java人(javaren.org)
     */
    public class TestCompress {
      /**
       * @param args
       */
      public static void main(String[] args) {
        String str = "aaaabbbbccdeaa";
        char[] cs = str.toCharArray();
        char last = 0;
        int num = 0;
        for (char c : cs) {
          if (last == 0) {
            last = c;
            System.out.print(last);
            num = 1;
          } else {
            if (c == last) {
              num++;
            } else {
              System.out.print(num);
              last = c;
              System.out.print(last);
              num = 1;
            }
          }
        }
        System.out.println(num);
      }
    }
      

  2.   

    绝无此事,本来粘在记事本中,只加了个class Test,编译运行,结果是:a6b4c1d1e1
    根本不存在处理不了最后两个字符串这回事。
    请楼主重新检察,如果使用类记事本编辑器,请确认字符编码是系统默认的字符编码。
      

  3.   


    String str = "aaaabbbbcdeaa"; 
    Matcher m=Pattern.compile("([a-z])(\\1*)").matcher(str);
    while(m.find())
    System.out.print(m.group(1)+(m.group(2).length()+1));
      

  4.   

    我记得有正则表达式可以处理的,忘记了!多谢java2000_net和hbgzg3006两位大哥了!
      

  5.   

    方法本身就有问题,你应该把两个for循环的条件换一下
      

  6.   

    刚才没考虑清楚,不好意思。我感觉逻辑应该是这样的:
    for(int i=0;i<ss.length;){
       j=ss[i];
       int count = 1;
       for(k=i+1;k<ss.length&&j==ss[k];k++){
          count++;
       }
       s=s+j+count;
    }
    System.out.println(s);
      

  7.   


    public class Test {
    public static void main(String[] args) {
    String str = "aaaabbbbcdeaa";
    StringBuffer strb = new StringBuffer();
    char j = str.charAt(0);
    int count = 1;

    for(int i = 1; i < str.length(); i++){
    //统计字符串相同字符个数
    if(j == str.charAt(i))
    count++;
    else{
    //不相同把字符和值加进strb
    strb.append(j).append(count);
    count = 1;
    j = str.charAt(i);
    }
    }
    //因为 最后一次没有加进strb
    strb.append(j).append(count);
    System.out.println(strb.toString());
    }
    }