无用内容:
在写作业时,有一道字符串字符整体向后移动k位的题目,经过查找后照猫画虎地使用了String.replace()方法,发现代码运行结果并不如意,我是个**
正文:
运行这段代码时,我的预想是每一次循环就对字符串中的一个字符进行替换,输入“123”,得到的输出是“234”,然而,最终运行结果却是“444”
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String pw = sc.nextLine(); //这是输入的字符串
String replace="NULL"; //目前还没用到
int k=1; //移动位置
for(int i=0;i<pw.length();i++){
char a=pw.charAt(i); //字符串对应的字符
char b=(char)(pw.charAt(i)+k); //移动后的字符
pw= pw.replace(a,b); //使用replace
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("pw:"+pw);
}
System.out.println("最终pw:"+pw);
}
分析结果,发现我忽略了一个细节
我使用了同一个字符串来接收replace()的输出,这使得下一次使用这个方法时,替换过的数据有可能会被再次替换,造成预料之外的结果。
随后我加入了一个新的字符串来接收输出
而输出结果变成了“124”
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String pw = sc.nextLine(); //这是输入的字符串
String replace="NULL"; //这就是新加的字符串
int k=1; //移动位置
for(int i=0;i<pw.length();i++){
char a=pw.charAt(i); //字符串对应的字符
char b=(char)(pw.charAt(i)+k); //移动后的字符
replace= pw.replace(a,b); //使用replace
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("replace:"+replace);
}
System.out.println("最终replace:"+replace);
}
然后发现我又忽略了新的细节
原来的字符串一直都没变,我一番操作疯狂替换,到最后实际上只是替换了最后一个字符
最后的解决方法:
我是个超级大**,只要用字符数组一个一个接收就好了,我真服了我自己
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String pw = sc.nextLine(); //这是输入的字符串
char[] replace=new char[pw.length()];
int k=1; //移动位置
for(int i=0;i<pw.length();i++){
replace[i]=(char)(pw.charAt(i)+k);
}
System.out.println(replace);
}