一、看到这个问题,首先想到的思路是:
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));
}
}