我正在尝试制作一个压缩字符串的方法。例如,该方法将采用"ttttesst"并返回"4te1st">
当我运行该方法并打印结果时,我得到:">
public class Compress {
public static String compress(String original){
int count = 1;
int oglength = original.length()-1;
StringBuilder newword = new StringBuilder("");
for(int i = 0; i < oglength; i = i+count){
count = 1;
for(int k = 1; k < oglength-k-i; k++){
if(original.charAt(i) == original.charAt(i+k)){
count++;
continue;
} else if(original.charAt(i) != original.charAt(i+k) && original.indexOf(original.charAt(i+k)) - original.indexOf(original.charAt(i)) > 1){
newword.append(newword);
newword.append(count);
newword.append(original.charAt(i));
break;
} else if(original.charAt(i) != original.charAt(i+k) && original.indexOf(original.charAt(i+k)) - original.indexOf(original.charAt(i)) == 1){
newword.append(newword);
newword.append(original.charAt(i));
count++;
break;
}
}
}
String returnword = newword.toString();
return returnword;
}
Compress方法在重复和滥用增量索引的情况下不追加任何内容。
以下是基于您的方法的工作版本:
public static String compress(String original) {
int count;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < original.length(); i = i + count) {
count = 1;
for (int k = i + 1; k < original.length(); k++) {
if (original.charAt(i) == original.charAt(k)) {
count++;
} else {
break;
}
}
if (count > 1) {
builder.append(count).append(original.charAt(i));
} else {
builder.append(original.charAt(i));
}
}
return builder.toString();
}
我认为您对您的程序感到困惑,因为unnnecessary loops
会增加复杂性,而if-else ladder
会比较您无法记住的字符(这就是debugging
可能对您有所帮助的地方(。
我不明白你们试图通过什么用例,但若你们想要上面提到的东西,那个么下面的代码片段可以帮你们完成。
Note:
我只考虑了一些基本场景。对于大量的测试用例,可能只需要少量的更改。
public class Demo {
public static String compress(String original){
int count = 0;
char temp = original.charAt(0);
StringBuilder sb = new StringBuilder("");
for(int i=0;i<original.length();i++) {
if(original.charAt(i)==temp) {
count++;
}else {
if(count!=1)
sb.append(count).append(temp);
else
sb.append(temp);
count=1;
temp=original.charAt(i);
continue;
}
}
if(count!=1)
sb.append(count).append(temp);
else
sb.append(temp);
//Above four lines get last character
//and its occurrence if it's more than 1.
return sb.toString();
}
public static void main(String args[]) {
System.out.println(compress("ttttesst"));
//Enter desired String value here.
//Also you may make it user-interactive.
}
}
您也可以参考以下链接,统计字符的出现次数,以及用于统计字符出现次数的HashMap Implementation和Hashing,以更好地了解如何处理此类问题。
我希望这能有所帮助!