gpt4 book ai didi

Java String += 需要速记解释

转载 作者:行者123 更新时间:2023-11-29 05:20:39 25 4
gpt4 key购买 nike

当我创建一个压缩字符串的程序时遇到了这个奇怪的问题,我将把代码片段和它们的输出粘贴在一起,我希望有人能清楚地解释为什么会这样。

第一个代码片段:这里如果连续出现相同的字母,则将连续出现的字母替换为相同字母的总数。例如: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加法,我无法得出结论,谁能解释一下。

我 sleep 不足,因此无法得出结论,因此请人澄清我的小疑惑。

最佳答案

与引用无关。当您执行 prev+count 时,prev 中字符的 ascii 值将与整数计数相加。在这种情况下:

“a”的 ascii 是 97,它出现了两次......所以 97 +2 = 99 ..
“b”的 ascii 是 98,它出现了两次...所以 98 +2 = 100 ..
"c"的 ascii 是 99,它出现了两次...所以 99 +2 = 101 ..
这就是为什么输出是 99100101991001019910010199100

试试这个:compressed+=(""+prev)+count;//这里使用简写

在这种情况下,或者在 compressed+=""+prev+count 情况下,由于操作是从左到右发生的,+ 运算符应用于字符串 ("") 和 char(prev) 并且行为类似于 append 并且还返回一个字符串。然后将生成的字符串附加到另一个 int (prev)

更好的方法是使用 StringBuilder

关于Java String += 需要速记解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com