更改字符串

时间:2016-05-29 10:23:13

标签: java loops

所以我有一个程序,我想用其他字母替换程序中的特定字符。但是,当我运行此程序时,似乎仍然会将更改后的字符恢复原状。这是到目前为止的代码:

  public static String changeSample(String sample) {

    for (int i = 0; i < sample.length(); i++) {

        if (sample.charAt(i) == 'A') {

            sample = sample.replace(sample.charAt(i), 'B');
            continue;

        }

        else if (sample.charAt(i) == 'B') {

            sample = sample.replace(sample.charAt(i), 'A');
            continue;

        }

    }

   return sample;

有没有办法可以遍历字符串中的每个字符,然后检查它是A,B,C,D,E还是F,并将其更改为其免费字母,即A到B, B至A,C至D,D至C,E至F,F至E。

1 个答案:

答案 0 :(得分:4)

replace()将返回一个新的String,其中特定字符的所有匹配项都会更改,而不仅仅是特定位置的字符。所以你的问题是重复的replace()语句有效地来回修改值。

因为String是不可变的,所以不能简单地用动态替换其他字符。因此,请将代码转换为使用StringBuilder代替。

StringBuilder buildSample = new StringBuilder();
buildSample.append(sample);

现在,您可以使用setCharAt()代替replace()一次更改一个位置的角色。

buildSample.setCharAt(i, 'A');

最后,您可以返回buildSample.toString()

至于将每个字母A到F更改为其补码,如果只需要这六个字母,则使用带有switch语句的硬编码函数。否则,您可以使用下面的complementaryLetter()之类的函数,它会在检查字符的ASCII值后返回补码。这适用于所有角色。对于非字符输入,您可以添加代码来处理无效情况。

完整的工作代码:

public class Replace {
    public static void main(String[] args) {
        String s1 = "ABCDEFA";
        System.out.println(s1);
        s1 = changeSample(s1);
        System.out.println(s1);
    }

    public static char complementaryLetter(char letter) {
        char retChar = 'A';
        if ((int) letter % 2 == 0)
            retChar = (char) ((int)letter - 1);
        else
            retChar = (char) ((int) letter + 1);
        return retChar;
    }

    public static String changeSample(String sample) {
        StringBuilder buildSample = new StringBuilder();
        buildSample.append(sample);
        for (int i = 0; i < sample.length(); i++) {
            buildSample.setCharAt(i, complementaryLetter(sample.charAt(i)));
        }
        return buildSample.toString();
    }
}