我需要帮助解压缩方法。我有一个有效的压缩方法。对于我需要考虑的任何建议?我需要parseInt还是......?欣赏建议。这是我到目前为止所拥有的。如果s =“ab3cca4bc”,那么它应该返回“abbbccaaaabc”,例如解压缩。
class RunLengthCode {
private String pText, cText;
public RunLengthCode () {
pText = "";
cText = "";
}
public void setPText (String newPText) {
pText = newPText;
}
public void setCText (String newCText) {
cText = newCText;
}
public String getPText () {
return pText;
}
public String getCText () {
return cText;
}
public void compress () { // compresses pText to cText
String ans = "";
for (int i = 0; i < pText.length(); i++) {
char current = pText.charAt(i);
int cnt = 1;
String temp = "";
temp = temp + current;
while (i < pText.length() - 1 && (current == pText.charAt(i + 1))) {
cnt++;
i++;
temp = temp + current;
}
if (cnt > 2) {
ans = ans + current;
ans = ans + cnt;
}
else
ans = ans + temp;
setCText(ans);
}
}
public void decompress () {
}
}
public class {
public static void main(String [] args) {
Scanner in = new Scanner(System.in);
RunLengthCode myC = new RunLengthCode();
String pText, cText;
System.out.print("Enter a plain text consisting of only lower-case alphabets and spaces:");
pText = in.nextLine();
myC.setPText(pText);
myC.compress();
System.out.println(pText+" => "+myC.getCText());
System.out.print("Enter a compressed text consisting of only lower-case alphabets, spaces and digits:");
cText = in.nextLine();
myC.setCText(cText);
myC.decompress();
System.out.println(cText+" => "+myC.getPText());
}
}
答案 0 :(得分:0)
您可以创建将字符串分解为regx组并将它们组合在一起。 以下模式有效
(([A-Za-z]+[\d]*))
这会将你的字符串“ab3cca4bc”分成几组 “ab3”,“cca4”,“bc” 因此,如果最后一个字符是一个数字,那么在循环中,您可以将该字符多次乘以它。
答案 1 :(得分:0)
好的,所以你有一个看起来像ab3cca4bc
1。)循环输入String
2.。)在每次循环迭代期间,使用String.charAt(int)
方法来获取单个字符
3。)Character
类有一个isDigit(char)
函数,可用于确定某个字符是否为数字。然后,您可以安全地使用Integer.parseInt(String)
(您可以使用myChar+""
将char转换为字符串)
4。)如果有问题的字符是数字,那么你需要有一个内循环来重复前一个字符正确的次数。你怎么知道最后一个角色是什么?也许有一个变量在每次在末尾添加字符时更新的循环外实例化?