Java从后面替换字符串中的字符

时间:2017-03-10 06:23:13

标签: java string for-loop

尝试用字符串中的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吗?

提前致谢。

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