5

这有效:

for (char c : sourceString.toCharArray()) 
    destString += (char) (c + shiftValue);

System.out.println(destString);

有没有更好/更快(优化)的方法?

4

3 回答 3

8

好吧,我会避免使用重复的字符串连接,开始。这是一个众所周知的性能问题。

在这种情况下,你知道你需要开始的确切长度,所以你甚至不需要 a StringBuilder- achar[]就可以了:

char[] result = new char[srcString.length()];
for (int i = 0; i < result.length; i++) {
    result[i] = (char) (srcString.charAt(i) + shiftValue);
}
String destString = new String(result);

使用然后覆盖每个元素的答案toCharArray也很好,尽管我希望任何性能差异都很小。如果这真的是性能关键代码,你会想用你的实际系统测试它。重点是两者都是 O(N) 方法,而不是 O(N 2 )。)

然而,你应该考虑你是否真的只想换档——大多数像这样的练习换档更多,例如,如果你从 AZ 开始,你也应该以 AZ 结束... 1 的 shift 值应该改变 Z到 A,而不是“Z 之后的 Unicode 字符”(即[)。在您的情况下,这可能不是一个要求,但您当然应该考虑它。

于 2016-12-05T07:22:17.703 回答
6

一个较短的版本。无需charAt(i)每次都在循环中调用。

char[] result = srcString.toCharArray();
for (int i = 0; i < result.length; i++) {
    result[i] += shiftValue;
}
String destString = new String(result);
于 2016-12-05T07:30:05.863 回答
1

就在这里:

StringBuilder destString = new StringBuilder();
for (char c : srcString.toCharArray()) {
    destString.appned((char) (c + shiftValue));
}
System.out.println(destString.toString());
于 2016-12-05T07:23:39.833 回答