含有字母与特殊符号的字符串(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 dataList = new ArrayList(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 dataList){
        for (int i = 0; i < dataList.size(); i++) {
            System.out.println(dataList.get(i));
        }
    }

 

你可能感兴趣的:(算法)