含有字母与特殊符号的字符串(abc--de---fghi),局部调整顺序使之变成(fghi---de--abc)

 

一、看到这个问题,首先想到的思路是:

1、先创建一个空的StringBuilder result

2、再创建一个空的StringBuilder periodResult

3、从后向前遍历字符串,如果是字符的话,就把字符 添加到 periodResult中,直至遍历到特殊字符,把periodResult 倒序添加到result中,再把特殊字符按顺序添加到result中。

4、把 periodResult 设置成空,在按照3步骤中的操作遍历。

static public void  sort3(){
        StringBuilder result = new StringBuilder(""); //最后输出的结果
        StringBuilder periodResult = new StringBuilder("");//保存字母的str
        boolean isCh = false; //是否是字符
        String str = "abc--de---fghi";
        for (int i = str.length()-1; i >= 0; i--){
            char ch = str.charAt(i);
            if (ch=='-'){
               if (isCh == true){
                   StringBuilder  tempStr = periodResult.reverse(); //把  periodResult 的内容倒序输出
                   result.append(tempStr);  //添加到 result
                   periodResult = new StringBuilder("");  //再把  periodResult 设置成空,在保存下个阶段的字母
               }
               result.append(ch); //保存特殊符号
               isCh = false;
            }else{
                isCh = true;
                periodResult.append(ch);  //保存现阶段的字母
            }
        }
        //最后再判断下 periodResult 是否还有值,因为---或者字母结尾,会导致漏掉一些内容。
        if (periodResult.length() != 0){
            StringBuilder  tempStr = periodResult.reverse();
            result.append(tempStr);
            periodResult = new StringBuilder("");
        }
        System.out.println(result);
    }

二,用正则表达式来进行切割,然后再进行组装。

 static public void sort(){
        String a = "abc--de---fghi";
        Pattern p = Pattern.compile("-+"); //以一个或多个 - 为正则内容。
        String[] str = p.split(a);  //根据匹配规则进行字符串操作。
        ArrayList<String> dataList = new ArrayList<String>(a.length());
        int count =  str.length;
        for (int i = a.length()-1; i >= 0; i--){
            char ch = a.charAt(i);
            if(ch == '-'){
                dataList.add(String.valueOf(ch)); //把特殊字符添加到 dsataList 中
            } else{
                count--;
                if (!str[count].equals(" ")){
                    dataList.add(dataList.size(),str[count]); //把分割出来的字符串拼接到   dataList 中
                    i = i-str[count].length()+1;
                }

            }
        }
        printStr(dataList);

    }
    static  public void printStr (ArrayList<String> dataList){
        for (int i = 0; i < dataList.size(); i++) {
            System.out.println(dataList.get(i));
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值