将字符串压缩为a2b3 ......等

时间:2015-01-31 18:38:00

标签: java string

简单介绍一些旧的Java技术。目前正在处理一系列问题,而且我们正在将aabbcccDDDDeff格式的字符串压缩为a2b2c3d4e1f2。在我的代码中发生了一些时髦的事情,请帮助解决它:

public static void main(String[] args) {
    String c = "aabbCCCCCdfff";
    System.out.println(compress(c));
}

public static String compress(String s) {
    String ns = "";
    int count = 0;
    char temp = 0;

    for (int x = 0; x < s.length(); x++) {
        if (x == 0) {
            ns.concat(String.valueOf(s.charAt(x)));     
            temp = s.charAt(x);
            count++;
        } else if (temp == s.charAt(x)) {
            count++;
        } else {
            ns.concat(String.valueOf(count));
            count = 0;
            ns.concat(String.valueOf(s.charAt(x)));
            temp = s.charAt(x);
        }
    }
    return ns;
}

输出只是显示为null。我想保持同样的逻辑

2 个答案:

答案 0 :(得分:1)

String.concatString#concat docs)不会改变你的字符串,它会返回一个你需要分配给字符串变量的新字符串

ns = ns.concat(theOtherString);

而不是这(基本上是无操作)

ns.concat(theOtherString);

例如:

ns = ns.concat(String.valueOf(s.charAt(x)));

我建议将StringBuilder及其append方法用于多个字符串连接。如果您选择不这样做,那么如果您可以在您的用例中说明为什么性能优势不存在,或存在但不适用,那就没问题了。

答案 1 :(得分:0)

Java中的

String是不可变的。 String.concat不会更改被调用的String,它会返回一个新的String,它是要调用的对象和参数的连接。如果您想累积字符串,最好使用StringBuilder

StringBuilder ns = new StringBuilder();
int count = 0;
char temp = 0;

for (int x = 0; x < s.length(); x++) {
    if (x == 0) {
        ns.append(s.charAt(x));     
        temp = s.charAt(x);
        count++;
    // rest of code...