Java:将字符串中的所有字符代码移动一个常量值
Java: Shift all character-codes inside a String by a constant value
这个有效:
for (char c : sourceString.toCharArray())
destString += (char) (c + shiftValue);
System.out.println(destString);
有better/faster(优化)方式吗?
嗯,我会 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);
( 然后覆盖每个元素也很好,虽然我希望任何性能差异都很小。如果这是 [=25,你会想用你的实际系统测试它=]真的性能关键代码。重点是两者都是O(N)方法而不是O(N2).)
但是,您应该考虑一下您是否真的只想移动 - 大多数像这样的练习更多的是旋转而不是移动,例如如果您从 A-Z 开始,那么您也应该以 A-Z 结束……移位值 1 应该将 Z 更改为 A,而不是 "the Unicode character after Z"(即 [
)。 可能不是你的情况的要求,但你当然应该考虑它。
是的,有:
StringBuilder destString = new StringBuilder();
for (char c : srcString.toCharArray()) {
destString.appned((char) (c + shiftValue));
}
System.out.println(destString.toString());
一个较短的版本。无需在循环中每次都调用 charAt(i)
。
char[] result = srcString.toCharArray();
for (int i = 0; i < result.length; i++) {
result[i] += shiftValue;
}
String destString = new String(result);
这个有效:
for (char c : sourceString.toCharArray())
destString += (char) (c + shiftValue);
System.out.println(destString);
有better/faster(优化)方式吗?
嗯,我会 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);
(
但是,您应该考虑一下您是否真的只想移动 - 大多数像这样的练习更多的是旋转而不是移动,例如如果您从 A-Z 开始,那么您也应该以 A-Z 结束……移位值 1 应该将 Z 更改为 A,而不是 "the Unicode character after Z"(即 [
)。 可能不是你的情况的要求,但你当然应该考虑它。
是的,有:
StringBuilder destString = new StringBuilder();
for (char c : srcString.toCharArray()) {
destString.appned((char) (c + shiftValue));
}
System.out.println(destString.toString());
一个较短的版本。无需在循环中每次都调用 charAt(i)
。
char[] result = srcString.toCharArray();
for (int i = 0; i < result.length; i++) {
result[i] += shiftValue;
}
String destString = new String(result);