如何从数组中取出空格?

时间:2012-09-12 01:44:25

标签: java

我必须制作一个程序,从输入数组中取出重复的字符,并打印出一个包含所有唯一字符的新数组。

一切正常。除非取出字符,否则在新数组的末尾会留下一个空框。

public class Deleter {

public static void main (String[] args){
    Scanner keyboard = new Scanner(System.in);

    char[] initialInputArray = new char[15];

    System.out.println("How many characters do you wish to enter?");

    int size = keyboard.nextInt();

    while ( size > initialInputArray.length ) {
        System.out.println("Error. Enter smaller number.");
        size = keyboard.nextInt();
    }
    if( initialInputArray.length <= 15) {           
        for ( int counter = 0; counter < size; counter++ ){             
            initialInputArray[counter] = keyboard.next().charAt(0);         
        }
        {

        }
    }

    deleteRepeats(initialInputArray, size); 
    //Comeback to print out array
    {
        for ( int helloWorld = 0 ; helloWorld < size ; helloWorld ++)
            System.out.print(  initialInputArray[helloWorld] );
    }
}



//"deleteReapets" method begins, looking for repeated user inputs
public static char[] deleteRepeats (char[] methodArray, int sizeTwo) {

    if (sizeTwo == 0)
        return methodArray;

    if (sizeTwo == 1)
        return methodArray;

    int uniqueCharacter = 1; 
    //Start at the second entered character.

    for (int x = 1; x < sizeTwo; ++x) { 
        int y;

        for (y = 0; y < uniqueCharacter; ++y) {
            if (methodArray[x] == methodArray[y]) break; // break if we find duplicate.
        }


        if (y == uniqueCharacter) {
            methodArray[uniqueCharacter] = methodArray[x]; // add
            ++uniqueCharacter; // increment uniqueCharacter...[0,uniqueCharacter) is still "unique char list"

        }
    }
    while ( uniqueCharacter < sizeTwo ) {
        methodArray[uniqueCharacter] = 0;
        uniqueCharacter++;

    }

            return methodArray;
}

}

3 个答案:

答案 0 :(得分:1)

该空框是您在数组末尾添加的空字符。您正在打印它们,因为您没有根据唯一字符的数量(可能小于输入大小)调整size。由于您没有创建新数组,因此无需从char []返回deleteRepeats。相反,您可以返回唯一字符的数量。这样,调用程序知道要打印多少。

如果您的作业要求deleteRepeats返回char[],那么您应该分配一个长度恰好等于uniqueCharacter的新数组,将唯一字符复制到其中,然后返回那。调用程序可以只打印新的(和更短的)数组,而不是打印输入的第一个size元素。

答案 1 :(得分:1)

最简单的方法可能是将一个新数组设置为字符数组的大小,然后将所有字符复制到其中。数组的问题是,一旦它们被初始化,它们就无法重新调整大小。如果您熟悉arrayLists,我建议您使用它们。但如果不尝试这样的话......

int count = 0;
for(int i = 0; i < initialInputArray.size; i++){
        count++;
}

char[] newArray = new char[count];


for(int i = 0; i < count; i++){
        newArray[i] = initialInputArray[i];
}

答案 2 :(得分:0)

我建议使用HashSet删除重复项并将您的字符包装到Character。像这样:

public static Character[] deleteRepeats (char[] methodArray){
    HashSet<Character> set = new HashSet<Character>();

    for(int index = 0; index < methodArray.length; index++){
        set.add(methodArray[index]);
    }

    return set.toArray(new Character[set.size()]);
}

所以在你的主要方法中,你会做的是这样的事情:

Character[] charArray = deleteRepeats(methodArray);
for(int index = 0; index < charArray.length; index++){
    System.out.println(charArray[index]);
}