java - 如何在循环中覆盖字符串
问题描述
public static String decrypt(final String encryptedText, final int n) {
char [] chars;
String s = encryptedText;
String s1 = "";
int buffer = 0;
int buffer2 = 1;
for (int j = 0; j < n; j++) {
if (j < 1){
chars = s.toCharArray();
}else{
chars = s1.toCharArray();
}
char [] charsUpdate = new char[chars.length];
for (int i = chars.length / 2; i < chars.length; i++) {
if (buffer % 2 == 0 && buffer <= charsUpdate.length){
charsUpdate[buffer] = chars[i];
}
buffer += 2;
}
for (int i = 0; i < chars.length / 2 ; i++) {
if (buffer2 % 2 != 0 && buffer2 < charsUpdate.length){
charsUpdate[buffer2] = chars[i];
}
buffer2 += 2;
}
s = "";
s1 = "";
for (int i = 0; i < charsUpdate.length; i++) {
s = s + charsUpdate[i];
}
s1 = s;
}
return s;
你好,社区。我这里有一些问题。我尝试解决一些任务,并且在我需要在循环中覆盖我的字符串时陷入困境。我需要在循环开始时给出我的旧字符串并在循环结束时覆盖这个字符串并在循环开始时给出新字符串,类似那样,但我不能这样做,因为在循环开始的第一次迭代之后我可以看看我的空字符串。对不起我的狗屎代码和糟糕的英语:)
解决方案
还有一些其他问题:
ArrayIndexOutOfBoundsException
因为条件buffer <= charsUpdate.length
不正确- 变量
buffer
和buffer2
在循环结束时不会重置,因此在charUpdate
第二次和下一次迭代期间重新创建数组后,符号不会从复制chars
到charUpdate
更新和重构的代码可能如下所示:
public static String decrypt(final String encryptedText, final int n) {
int len = encryptedText.length();
int half = len / 2;
String s = encryptedText;
for (int j = 0; j < n; j++) {
char[] chars = s.toCharArray();
char[] charsUpdate = new char[len];
for (int i = half, even = 0; i < len && even < len; i++, even += 2) {
charsUpdate[even] = chars[i];
}
for (int i = 0, odd = 1; i < half && odd < len; i++, odd += 2) {
charsUpdate[odd] = chars[i];
}
s = new String(charsUpdate);
}
return s;
}
但我不确定它是否会产生有效的结果。
一个简单的测试显示以下输出:
for (int i = 1; i < 5; i++) {
System.out.println("abcdefgh (" + i + ") -> " + decrypt("abcdefgh", i));
}
输出:
abcdefgh (1) -> eafbgchd
abcdefgh (2) -> gecahfdb
abcdefgh (3) -> hgfedcba
abcdefgh (4) -> dhcgbfae
----
// for odd length of the input string
abcdefg (1) -> daebfcg
abcdefg (2) -> bdfaceg
abcdefg (3) -> abcdefg
abcdefg (4) -> daebfcg
推荐阅读
- azure-devops - Azure Pipeline Cron Scheduler:不要同时轮询所有分支
- r - 在 r 中使用 dplyr 有效地重塑数据帧
- matomo - Matomo 中的目标创建问题
- git - 使用带有裸存储库的子模块失败
- jenkins - 应用和保存按钮在 Jenkins 上不起作用
- php - 如何在 prestashop 中发送电子邮件?
- ngrx - 如何使用实体适配器和并行返回状态对象
- ios - 按下按钮swiftUI时计时器不显示正确的时间
- javascript - 如何使用 jQuery/Javascript 将值保存到 localStorage
- group-policy - 无法使用此 GPO 组合用户是 X 组的成员并且用户不是 Y