所以我有一个程序,我想用其他字母替换程序中的特定字符。但是,当我运行这个程序时,它似乎一直在恢复更改后的字符。这是到目前为止的代码:
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/