尝试用字符串中的ASCII字符替换某些字符时遇到了一些问题。
所以让我说我得到了这个字符串“CCCCCCC”。执行某些方法后,它将变为“CCCCCCa”。然后第二次我将检查第二个最后一个字符并执行一些方法来获得“CCCCCca”。然后第三次检查第三个字符,依此类推,重复7次。
for (int i = 0; i < 256; i++){
plaintext = plaintext .substring(0,plaintext .length() - counter) + Character.toString((char)i);
}
我使用for循环遍历所有256个ASCII字符。执行一些解密后,计数器将递增。所以基本上第一次,它将是-1(这是最后一个字符),然后第二次将是-2(这是第二个最后一个字符),依此类推子串。
让我这样说,我第一次想要将所有256个ASCII附加到我的7个字节字符串的末尾。然后在我执行一些解密后,字符串将变为CCCCCCCa。因此,当我第二次循环时,我将用所有256个ASCII替换字符串中的第二个最后一个字符。经过一些解密后,字符串将变为CCCCCC(a。然后我循环直到字符串中不再有C语言。
但是,我得到的String索引超出范围:-1错误消息。在每个for循环之后,还有其他方法可以将字符串的最后一个字符替换为1吗?
提前致谢。
答案 0 :(得分:0)
首先,不要忘记其余部分。
plaintext = plaintext.substring(0,plaintext .length() - counter)
+ Character.toString((char)i)
+ plaintext.substring(plaintext .length() - counter + 1) ; //TO add the rest
然后,您需要检查计数器是否不大于plaintext.length()
for (int i = 0; i < 256 && counter <= plaintext.length(); i++){
我建议使用String.toCharArray()
并从最后迭代,这会更容易。
char[] array = plaintext.toCharArray();
for(int i = array.length - 1, char c = 0; i >= 0; --i){
array[i] = c++;
}
两个代码的示例:(使用'a'作为第一个字符而不是0)
public static void main(String[] args) {
String plaintext = "CCCCCC";
for (int i = 'a', counter = 1; i < 256 && counter <= plaintext.length(); i++, ++counter) {
plaintext = plaintext.substring(0, plaintext.length() - counter)
+ Character.toString((char) i)
+ plaintext.substring(plaintext.length() - counter + 1);
}
System.out.println(plaintext);
plaintext = "CCCCCC"; //fedcba
char[] array = plaintext.toCharArray();
char c = 'a';
for (int i = array.length - 1; i >= 0; --i) {
array[i] = c++;
}
System.out.println(new String(array)); //fedcba
}
FEDCBA
FEDCBA