繁体   English   中英

如何删除数组中的指定字符并将元素复制到另一个数组

[英]how to delete specified character in array and copy the elements to another array

如何删除数组中的指定字符并将第一个数组的元素复制到第二个数组?

我试图将数组转换为列表,以便能够检查数组是否包含此指定字符,然后尝试删除该字符并通过复制第一个数组的元素但不包含指定字符来创建另一个数组。

系统显示此错误:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:161)
    at java.util.AbstractList$Itr.remove(AbstractList.java:375)
    at java.util.AbstractCollection.remove(AbstractCollection.java:269)
    at test4.test4.main(Question4.java:21)

这是我的代码:

package test4;

import java.util.Arrays;

public class test4 {

    public static void main(String[] args) {

        String[] a = new String[]{ "A", "b", "C", "$", "$", "$", "d", "s", "w", "t", "Z",
                "r", "I", "o", "A", "b", "C", "$", "$", "$", "d", "s", "w", "t" };

        String[] b = new String[a.length];
        int num = 0;
        for(int i =0; i<a.length; i++){

            if(Character.isUpperCase(i)){
                num++;
            }
            if(Arrays.asList(a).contains("$")){

                Arrays.asList(a).remove("$");
                b[i] =a[i];
            }
        }
        System.out.println("number os uperCase is: " + num);
        System.out.println();
        System.out.println("this is the new Array: " + Arrays.toString(b));

    }

}

谁能帮我解决这个问题?

Arrays.asList(a)返回固定长度的列表,因此Arrays.asList(a).remove("$"); 不能工作。

您可以改为遍历数组:

    int count = 0;
    for(int i =0; i<a.length; i++){
        if(Character.isUpperCase(a[i].charAt(0))){
            num++;
        }
        if(!a[i].equals("$")){ // copy only non "$" Strings to the output array
            b[count] =a[i];
            count++;
        }
    }

请注意,您的大写字符计数也是错误的,因为您是在数组的索引而不是其中包含的Character.isUpperCase上调用Character.isUpperCase

您应该考虑的另一件事是将String[] a更改为char[] a ,因为看起来该数组中只有单个字符Strings。

我真的是Java的新人,这是我回答的第一个问题,所以如果我错了,我感到抱歉。 事情就这样了:Character.isUpperCase()无法检查字符串。 它只能检查一个字符。 因此,我将数组从String更改为char(对于每个字符,用'代替“。)其次,if语句需要检查a [i]而不只是i。第三,我将使第二个数组成为ArrayList并转换每个数组将char添加到String,以便第二个数组的大小无关紧要,并且可以与其他数组一起使用。

import java.util.ArrayList;
import java.util.Arrays;


public class test4 {

    public static void main(String[] args) {
        char[] a = new char[]{ 'A', 'b', 'C', '$', '$', '$', 'd', 's', 'w', 't', 'Z',
            'r', 'I', 'o', 'A', 'b', 'C', '$', '$', '$', 'd', 's', 'w', 't' };

    ArrayList<String> b = new ArrayList<>();
    int num = 0;

    for(int i = 0; i<a.length; i++){

        if(Character.isUpperCase(a[i])){
            num++;
        }

        if(Arrays.asList(a[i]).contains('$')){

        }
        else{
            String conv = Character.toString(a[i]);
            b.add(conv);
        }
    }

    System.out.println("number of upperCase is: " + num);
    System.out.println();
    System.out.print("This is the new Array: " );
    for(String value: b ){
        System.out.print(value + " ");
    }
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM