如何在没有大写字符的情况下将元素复制到第二个数组?

时间:2015-02-04 13:14:16

标签: java arrays for-loop arraycopy

我需要将一个数组的元素复制到另一个数组删除大写,然后复制小写。我将不胜感激。

我使用了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));


    }
}

4 个答案:

答案 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];
   }
}