java - 更改字符串中的多个字符

标签 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。

最佳答案

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();
    }
}

关于java - 更改字符串中的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37508747/

相关文章:

Java 测试验证构造函数

Javascript 帮我做这个,这样它就干了

bash - 使用 fd 嵌套 while 读取循环

loops - while 循环中的错误

python - 从python中的字符串中获取两个字符

java客户端服务器多线程,仅适用于一个连接

java - 我可以将java返回的hashmap存储在机器人框架变量中吗?

python - 如何展平大循环堆栈?

java - 如何使用一致的数据针对 Oracle UCM 执行集成测试?

java - 运算符 > 未定义参数类型 Object, int