如何实现aaabbbsdd转换成3a3bs2d
我刚开始的思路是用正则表达式
先切割然后替换,可是写不出来。
希望大家能写出来参考一下、谢谢。或者给个伪代码。
[code="java"]
public class StringZip {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Stack stack = new Stack();
for (char c : "aaabbbsdd".toCharArray()) {
stack.push(c, sb);
}
stack.append(sb);
System.out.println(sb);
}
static class Stack {
private int count = 1;
private Character chr;
public void push(char c, StringBuilder sb) {
// 初次。
if (chr == null) {
chr = c;
return;
}
// 相同则+1。
if (chr == c) {
count++;
return;
}
// 不同则输出。
append(sb);
// 重置。
chr = c;
count = 1;
}
public void append(StringBuilder sb) {
if (count > 1) {
sb.append(count);
}
sb.append(chr);
}
}
}
[/code]
[code="java"]public static void main(String[] args) {
char[] chars = "aaabbbsdd".toCharArray();
StringBuilder s = new StringBuilder();
int count = 0;
for(int i = 0, l = chars.length; i < l; i++) {
char ch = chars[i];
//如果不是最后一个 判断当前的 是否和下一个匹配 如果匹配count+1 继续下一轮
if( i + 1 < l && chars[i+1] == ch) {
count++;
continue;
}
//如果是最后一个 判断最后一个 是否和前一个匹配 如果匹配count+1
if(i + 1 == l && chars[i - 1] == ch) {
count++;
}
s.append(ch);
if(count > 1) {
s.append(count);
}
count = 0;
}
System.out.println(s.toString());
}[/code]
1、转换字符串为字符数组循环。
2、设置计数单位变量 i,设置待比较字符变量 c;
3、循环字符数组,取当前字符c,循环比较,如果和下一个相同,计数变量i加1,否则清零重新计数;