简单介绍一些旧的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。我想保持同样的逻辑
答案 0 :(得分:1)
String.concat
(String#concat docs)不会改变你的字符串,它会返回一个你需要分配给字符串变量的新字符串
ns = ns.concat(theOtherString);
而不是这(基本上是无操作)
ns.concat(theOtherString);
例如:
ns = ns.concat(String.valueOf(s.charAt(x)));
我建议将StringBuilder
及其append
方法用于多个字符串连接。如果您选择不这样做,那么如果您可以在您的用例中说明为什么性能优势不存在,或存在但不适用,那就没问题了。
答案 1 :(得分:0)
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...