所以我有一个程序,我想用其他字母替换程序中的特定字符。但是,当我运行此程序时,似乎仍然会将更改后的字符恢复原状。这是到目前为止的代码:
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。
答案 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();
}
}