这有效:
for (char c : sourceString.toCharArray())
destString += (char) (c + shiftValue);
System.out.println(destString);
是否有更好/更快(优化)的方式?
答案 0 :(得分:7)
嗯,我avoid using repeated string concatenation,一开始。这是一个众所周知的性能问题。
在这种情况下,您知道开始时需要的确切长度,因此您甚至不需要StringBuilder
- char[]
就可以了:
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);
(answer using toCharArray
然后覆盖每个元素也很不错,虽然我希望任何性能差异都很小。如果这是真的<你想要用你的实际系统测试它/ em>性能关键代码。重点是两者都是O(N)方法而不是O(N 2 )。)
但是,你应该考虑一下你是否想要转移 - 这样的大多数练习比移动更多 rotate ,例如如果从A-Z开始,你最终也应该得到A-Z ......移位值1应该将Z改为A,而不是“Z之后的Unicode字符”(即[
)。 可能在您的情况下不是必需的,但您当然应该考虑它。
答案 1 :(得分:6)
较短的版本。无需每次在循环中调用obj1.Equals(obj2)
。
charAt(i)
答案 2 :(得分:1)
是的,有:
StringBuilder destString = new StringBuilder();
for (char c : srcString.toCharArray()) {
destString.appned((char) (c + shiftValue));
}
System.out.println(destString.toString());