关于String.replace()使用出现错误时的一些自我批评

本文讲述了作者在解决一道关于字符串字符整体向后移动k位的题目时,误用String.replace()导致意外结果的经历。通过逐步分析和修正,作者揭示了replace方法的内存问题,并分享了正确处理方式——使用字符数组。
摘要由CSDN通过智能技术生成

无用内容:

在写作业时,有一道字符串字符整体向后移动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);
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值