我需要将一个数组的元素复制到另一个数组删除大写,然后复制小写。我将不胜感激。
我使用了System.arraycopy()
,输出是大写的总和:
5 [a,B,c,R,n,k,W,v,t,G,L]
这是我的代码
package question4;
import java.util.Arrays;
public class CharArray {
public static void main(String[] args){
char[] array = new char[]{'a','B','c','R','n','k','W','v','t','G','L',};
char[] newarray = new char[array.length];
int n = 0;
for(int i = 0 ; i< array.length; i ++){
if(Character.isUpperCase(array[i])){
n++;
System.arraycopy(array, 0, newarray, 0, array.length);
}
}
System.out.println("the sum of uperCase is : " + n);
System.out.println(Arrays.toString(newarray));
}
}
答案 0 :(得分:1)
每个char都有一个ASCII表示。你通过简单地将一个字符串转换为int来获得它:int aCode = (int) 'a';
将aCode的值设置为97.小写字符从代码97-122开始,大写字母字符都低于97。
我想这是一种功课,所以我猜你不允许使用ArrayList
这样的大小可变的东西。因此,您还必须计算数组中小写字母的数量。
int lowerCount = 0;
for (int i = 0; i < array.length; i++) {
if ((int) array[i] >= 97 && (int) array[i] <= 122) lowerCount++;
}
现在让我们声明一个具有计算大小的新char数组:
char[] newArray = new char[lowerCount];
现在您可以开始将小写字符复制到新数组:
int newIndex = 0;
for (int i=0; i<array.length; i++) {
if ((int) array[i] >= 97 && (int) array[i] <= 122) {
newArray[newIndex] = array[i];
newIndex++;
}
}
System.out.println("The lower case chars are:" + Arrays.toString(newArray) + "; There are " newArray.length + " of them.);
System.out.println((array.length-newArray.length) + " capital chars werde removed.")
你需要newIndex来记忆你已经复制到新数组的字符数 - 意味着存储下一个找到的小写字母的索引。
答案 1 :(得分:0)
如果你只想复制小写,那么由于你事先不知道有多少数组元素是大写或小写,我宁愿复制到动态大小的集合中(例如ArrayList)然后在完成时转换为数组,例如
List<Character> chars = new ArrayList<Character>();
for (Character c : array) {
if (Character.isLowerCase(c)) {
chars.add(c);
}
}
Character[] lowerCase = chars.toArray(new Character[0]);
比担心System.arrayCopy()
(我更倾向于使用批量复制而不仅仅是复制单个元素)和所有您正在维护的偏移更简单。
请注意,结果数组是它填充的小写元素数量的大小(与之前定义的静态大小数组相反,如上所述)
另请注意,如果原始数组中包含非字母字符,则不清楚您想要发生什么。如果发生这种情况,您可能需要更强大的字符检查。
答案 2 :(得分:0)
使用temp数组存储值,然后根据大写字母的长度在newArray中复制这些值。
public static void main(String[] args){
char[] array = new char[]{'a','B','c','R','n','k','W','v','t','G','L',};
char[] temp = new char[array.length];
int cnt = 0;
int n = 0;
for(int i = 0 ; i< array.length; i ++){
if(Character.isUpperCase(array[i])){
n++;
temp[cnt++]=array[i]; // put your values in temp array
}
}
System.out.println("the sum of uperCase is : " + n);
char[] newarray = new char[cnt]; // cnt giving no of capital letters
System.arraycopy(temp, 0, newarray, 0, cnt); // copy temp array to new array
System.out.println(Arrays.toString(newarray));
}
输出
the sum of uperCase is : 5
[B, R, W, G, L]
答案 3 :(得分:-1)
目前,只要有大写字符,您的代码就会将array
的所有值复制到newarray
。
要实现您的目标,请尝试以下方法:
int n = 0;
for(int i = 0 ; i< array.length; i ++){
if(Character.isUpperCase(array[i])){
n++;
}
}
char[] newarray = new char[array.lenght - n];
int index = 0;
for(int i = 0;i < array.lenght;i++){
if(Character.isLowerCase(array[i])){
newarray[index++] = array[i];
}
}