预定程序员 2024-03-05 18:46 采纳率: 67.4%
浏览 1

Java数组中空格替换,,输出后为什么新数组还包含旧数组内容

数组中空格替换成“%20”,原数组为:a b c d ;总共八位,替换后,一个空格多出来两位,最后长度应该是16位,现在代码输出长度是24位,为什么?导致输出的数组包含了原来的就数组,怎么样才能只输出新数组


public class L3 {

    public static void main(String[] args) {
        char[] arr=new char[100];
        arr[0]='a';
        arr[1]=' ';
        arr[2]='b';
        arr[3]=' ';
        arr[4]='c';
        arr[5]=' ';
        arr[6]='d';
        arr[7]=' ';
        find1(arr,8);
    }
    public static void find1(char[] arr,int length) {
        int count=0;
        for(int i=0;i<length;i++) {
            count++;
        }
        count*=2;
        count+=length;
        int p1=length-1;
        int p2=count-1;
        while(p1>=0) {
            if (arr[p1] == ' ') {
                arr[p2--] = '0';
                arr[p2--] = '2';
                arr[p2--] = '%';
            }
            else {
                arr[p2--]=arr[p1];
            }
            p1--;
        }
        System.out.println(count);
        for (int i=0;i<count;i++) {
            System.out.print(arr[i]);
        }
    }
}

img

  • 写回答

4条回答 默认 最新

  • 关注

    预定程序员 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题出在对新数组长度的计算上。在原数组的长度为8的基础上,每个空格需要替换成"%20",也就是3个字符。所以,新数组的长度应该是8 + 3 * 空格的个数。但是你的计算中,却是每个字符计数两次(count *= 2)。所以导致计算出来的新数组长度过长。

    另外,你在替换空格时,从后往前遍历数组,逐个将字符放入新数组中。但是没有考虑到新数组可能有多余的空间。所以,新数组中可能会包含旧数组的内容。

    要解决这个问题,可以按照以下方案进行修改:

    1. 初始化一个新的StringBuilder对象,用于构建新的字符串。
    2. 遍历原数组,如果当前字符是空格,就将"%20"添加到StringBuilder中;如果不是空格,就将当前字符添加到StringBuilder中。
    3. 最后将StringBuilder转换为字符串,并输出。

    代码示例:

    public static void find1(char[] arr, int length) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            if (arr[i] == ' ') {
                sb.append("%20");
            } else {
                sb.append(arr[i]);
            }
        }
        String newString = sb.toString();
        System.out.println(newString);
    }
    

    这样,输出的结果就只包含新数组中的内容,不会包含旧数组的内容了。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月5日

悬赏问题

  • ¥15 VS2022 C++的相关代码问题咨询
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥30 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码