字符串问题之 字符串的统计字符串

本文介绍了一种处理字符串的方法,包括如何生成字符串的统计形式及如何从统计字符串中解析出特定位置的字符。提供了完整的Java代码实现,展示了遍历字符串、计数及字符解析的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串问题之 字符串的统计字符串

问题1、给定一个字符串str, 返回str的统计字符串,

例如: “aaabbadddffc”的统计字符串为“a_3_b_2_a_1_d_3_f_2_c_1”

进阶题目:

 给定一个统计字符串cstr, 在给定一个整数inde  返回代表的字符

问题2、例如: "a_1_b_100"  index=50的字符是’b‘

 

 

问题1思路:

      str为空,则统计字符串不存在

      str不为空,首先生成String类型res,表示统计字符串,num表示数量(初始位置:str[0], nim=1)

     不停的遍历 就是看看 str[i]跟str[i-1]的关系 等于num++  不等于则 res=res+"_"+num+"_"+str[i](把当前的加入哈) 然后num=1 继续遍历~~~~~

     写入num的条件是发现新字符时候,此时一定要注意!!! 当遍历结束时候!

 

    

package TT;

public class Test3 {
 
    public  static String getCountString(String str){
        
          if(str==null || str.equals("")){
               return "";
          }
          char[] chs = str.toCharArray();
          
          String res= String.valueOf(chs[0]);
          int num=1;
          
          
          for(int i =1; i<chs.length; i++){
               if(chs[i]!=chs[i-1]){
                   res = concat(res, String.valueOf(num), String.valueOf(chs[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);
     }
     
     
     public static void main(String[] args)    {
         
           String str  = "aaabbadddffc";
           String s = getCountString(str);
           System.out.println(s);
         
     } 
     
     
     

     
}

结果:

 

问题2

 解题过程

  1 boolean stage   控制进入哪个状态  true代表字符阶段    false代表遇到连续字符统计阶段  初始时候 stage=true   cur=0 num=0 sum=0

     比较sum跟index的关系

上代码:

package TT;


public class Test3 {
 
    public static char getCharAt(String cstr, int index){
           if(cstr ==null || cstr.equals("")){
                return 0;
           }
           
           char[] chs=cstr.toCharArray();
           boolean stage = true;
           char cur = 0;
           int num = 0;
           int sum=0;
           for(int i =0; i!=chs.length; i++){
               if(chs[i]=='_'){
                    stage =!stage;
               }else if(stage){
                   sum +=num;
                   if(sum > index){
                       return cur;
                   }
                   num =0;
                   cur = chs[i];
               }else{
                   num = num*10+chs[i]-'0';
               }
           }
           
           return sum+num>index?cur:0;
           
    }
     
    public static void main(String[] args){
        String cstr ="a_1_b_100";
        int index = 50;
        char a = getCharAt(cstr, index);
        System.out.println(a);
    }
    
    
    
}

结果:

 

  可以这么玩儿:

public class Test6 {

    public static String getCountString(String str) {
        String start = str.charAt(0) + " ";
        String res = "";
        int count = 1;
        for (int i = 1; i < str.length(); i++) {
            int last = str.length() - 1;
            if (str.charAt(i) == str.charAt(i - 1) && i != last) {
                count++;

            } else if (i == last) {
                if (str.charAt(i) == str.charAt(i - 1)) {
                    count++;
                    res = res + str.charAt(i) + "-" + count;
                } else {
                    res = res + str.charAt(i) + "-" + 1;
                }
            } else {
                res = res + start + "-" + count + "-";
                start = str.charAt(i) + "";
                count = 1;
            }
        }
        return res;

    }

    public static void main(String[] args) {
        String str = "aaabbadddffc";
        System.out.println(getCountString(str));
    }

}

 

posted @ 2017-08-19 16:52 toov5 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值