面向对象问题append去统计字符串字符个数

编程填空题,中间部分是我自己写的,但是怎么都不能输出像这样:

img


请教会的学长



import  java.util.Scanner;

public  class  Work6  {
        public  static  void  main(String[]  args)  {
                Scanner  input  =  new  Scanner(System.in);
                String  str  =  input.nextLine();
                StringBuilder  sb  =  new  StringBuilder("");
                
                char  current  =  str.charAt(0);
                int  count  =  1;
-----------
for (int i = 0; i < str.length(); i++) {
            for (int j = 65; j < 122; j++) {
                current=str.charAt(i);
                if (current==j){
                   count++;
                }
            }
        }

        count -= 1;

----------
                if  (count  ==  1)  sb.append(current);
                else  sb.append(current).append(count);
                
                System.out.println(sb.toString());
        }
}

```朋友们帮助一下

aaaabbbccddddaaaccc
这种是写成a4b3c2d4a3c3还是写成a7b3c5d4?这两种的写法不一样

先给个例子,不知道是否符合题意,你先参考看一下吧:

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一串小写字母:");
        String line = scan.nextLine();
        if(!"".equals(line.trim())){
            String[] arr = line.split(""); //分割成单个字符串
            List<String> list = Arrays.asList(arr); //转成List
            Set<String> set = new HashSet<String>(list); //转成set去重
            for(String key : set){ //遍历set
                int oldC = line.length(); //计算原字符串长度
                int newC = line.replace(key, "").length(); //用空字符替换指定字符后再计算长度
                String info = (oldC-newC)>1?key+(oldC-newC):key; //两个字串长度差即为指定字符出现次数,次数大于1的再字符后加数字
                System.out.print(info); //打印字符+数字不换行
            }
            
        }else{
            System.out.println("未检测到输入!");
        }
        scan.close();
    }

img

根据题意和数组分析,相同字母是连续存在的。
那么直接比较当前数据和前一个数据是否一致即可。
特殊处理:1.应从下标开始和前一个比较,同,++。不同,输出字符和数字然后重置
2.若是最后一个字符和之前相同需要判断输出。

 public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        StringBuilder sb = new StringBuilder("");

        char current = str.charAt(0);
        int count = 1;

        for (int i = 1; i < str.length(); i++) {
            char a = str.charAt(i);  //当前i指向数据 ,从下标1开始
            if (current == a) {
                count++;
                if (i == str.length() - 1) {//  当时最后一个数据时,相等输出字符+次数
                    sb.append(current).append(count);
                }
            } else {
                if (count == 1)
                    sb.append(current);
             else
                sb.append(current).append(count);
//             不同了,重置字符和次数
                count = 1;
                current = a;
            }
        }
        System.out.println(sb.toString());
    }