压缩字符串方法没有返回新字符串?



我正在尝试制作一个压缩字符串的方法。例如,该方法将采用"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,以更好地了解如何处理此类问题。

我希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新