如何删除数组中的指定字符并将第一个数组的元素复制到第二个数组?
我试图将数组转换为列表,以便能够检查数组是否包含此指定的字符,然后我尝试删除此字符并通过复制第一个数组但没有指定字符的元素创建另一个数组。
系统显示此错误:
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));
}
}
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
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
而不是包含在其中的字符。
您应该考虑的另一件事是将String[] a
更改为char[] a
,因为看起来您在该数组中只有单个字符串。
答案 1 :(得分:0)
我真的很喜欢Java,这是我回答的第一个问题,所以如果我错了,我很抱歉。在这里: Character.isUpperCase()无法检查String。它只能检查一个字符。所以我会将数组从String更改为char('而不是每个字符')。 其次,if语句需要检查[i]而不仅仅是i。 第三,我会让你的第二个数组成为一个ArrayList,并将每个char转换为toString,这样第二个数组的大小就无关紧要,可以用于不同的数组。
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 + " ");
}
}
}