解压缩String方法

时间:2014-12-09 00:25:20

标签: java loops

我需要帮助解压缩方法。我有一个有效的压缩方法。对于我需要考虑的任何建议?我需要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()); 

  }
 }

2 个答案:

答案 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。)如果有问题的字符是数字,那么你需要有一个内循环来重复前一个字符正确的次数。你怎么知道最后一个角色是什么?也许有一个变量在每次在末尾添加字符时更新的循环外实例化?