【发布时间】:2014-09-14 09:56:43
【问题描述】:
在创建压缩字符串的程序时遇到了这个奇怪的问题,我会将代码 sn-ps 与他们的输出粘贴在一起,我希望有人能清楚地解释为什么会发生这种情况。
第一个代码sn-p:这里如果相同的字母连续出现,那么连续出现的字母被替换为相同字母的总数。例如:aaabbb 应该写成 a3b3。
public static String compress(String str){
String compressed = "";
char prev = str.charAt(0);
int count = 1;
for (int i = 1; i < str.length(); i++) {
char curr = str.charAt(i);
if (curr == prev) { // in case curr is equal to prev
count++;
} else { // in case curr is not equal to prev
//compressed=compressed+prev+count;
compressed+=prev+count; // Shorthand used here
count=1;
prev=curr;
}
}
compressed=compressed+prev+count; // Shorthand not used
System.out.println(compressed);
return compressed;
}
上面这段代码用aabbccaabbccaabbccaabb输入时的输出是99100101991001019910010199b2,观察输出的最后两个元素,这是因为在循环之外,没有使用速记。如果我在循环内将表达式写为 compressed = compressed +prev+count,我将得到预期的输出。
我认为这个输出是因为操作弄乱了字符串的地址。但是接下来的代码又让我困惑了。
String prev= "abc";
String curr = "def";
String result="";
result+=prev+curr;
System.out.println(result);
我认为这是因为右手操作正在执行 ASCII 加法,我无法得出结论,谁能澄清一下。
我睡眠不足,因此无法得出结论,因此请某人澄清我的琐碎疑问。
【问题讨论】:
-
预期输出是什么?
-
我猜是 a2b2c2a2b2c2a2b2c2a2b2 @Vij 纠正我,如果我错了
-
给定输入的预期输出是 a2b2c2a2b2c2a2b2c2a2b2
标签: java string reference shorthand