Java:将String中的所有字符代码移动一个常量值

问题描述 投票:4回答:3

这有效:

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

System.out.println(destString);

是否有更好/更快(优化)的方式?

java arrays string shift character-codes
3个回答
8
投票

好吧,我想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然后覆盖每个元素也很好,虽然我希望任何性能差异都很小。如果这是真正的性能关键代码,你想用你的实际系统进行测试。重点是两者都是是O(N)方法而不是O(N2)。)

但是,你应该考虑一下你是否真的只想换班 - 这样的大多数练习都是轮换而不是轮换,例如如果从A-Z开始,你最终也应该得到A-Z ......移位值1应该将Z改为A,而不是“Z之后的Unicode字符”(这是[)。在您的情况下,这可能不是一个要求,但您当然应该考虑它。


6
投票

更短的版本。无需每次在循环中调用charAt(i)

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

1
投票

就在这里:

StringBuilder destString = new StringBuilder();
for (char c : srcString.toCharArray()) {
    destString.appned((char) (c + shiftValue));
}
System.out.println(destString.toString());
© www.soinside.com 2019 - 2024. All rights reserved.