如何从数组中删除特定元素

时间:2012-07-30 18:28:56

标签: java arrays

我在char数组中测试了不同的元素,如果它们不符合条件,我想从数组中删除它们。有没有办法做到这一点?

这是我的代码sofar

String s;
    char[] b = inputString.toCharArray();
    b = new char[b.length];
    do
    {

        if(!(b[i]>='0')&&(b[i]<='9')&&(b[i]!='.'))
        {
            s = Character.toString(b[i]);
            if(s.equals("+"))
            {
                t = 1;
            }
            else if(s.equals("-"))
            {
                t = 2;
            }
            else if // and so on

            }
            else
            {
                t = 1029;
            }
            //want to delete element here if they fail if test
        }

6 个答案:

答案 0 :(得分:2)

这应该做你想要的:

ArrayList<char> charList = new ArrayList<char>(0);

for (int i= 0; i < b.length; i++) {
    if (b[i] == condition) {
        charList.Add(b[i]);
    }
}

charList.toArray();

答案 1 :(得分:2)

因为评论不允许良好的代码格式化:

在代码开头,您将String内容作为char[]获取,并通过为变量分配相同大小的新char[]来立即再次丢失。

char[] b = inputString.toCharArray();
b = new char[b.length];

所以循环在默认初始化数组上工作,而不是在字符串内容上工作。您需要两个数组引用来进行复制。

答案 2 :(得分:1)

在这里使用switch声明可能更好。而不是从你的数组中消除你不想要的字符(迭代期间的变异是邪恶的,除非你使用Iterator),为什么不使用StringBuilder类来捕获所有的你想要的角色?

答案 3 :(得分:1)

你真的无法删除该元素,但你可以通过执行类似b [i] = 0的操作来更改它;在给定代码的末尾。数组是一定的长度,长度不能改变,所以如果你想删除数组的那部分我会建议使用列表。

List temp = b.asList();
Iterator it = temp.iterator();
while(it.hasNext())
{
    if(it.next() == "t")  //your modification code here
        it.remove();
}
char[] newB = temp.toArray();

我觉得这样的事情对你有用。

答案 4 :(得分:1)

char[] finishedArray = new char[0];
char[] arrayToCheck = new char[]{ 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
for( int i = 0; i < arrayToCheck.length; i++ )
{
    if( !doesNOTMeetSomeCondition( arrayToCheck[ i ] ) )
    {
        //DOES meet keep condition, add to new array
        char[] newCharArray = new char[ finishedArray.length + 1 ];
        for( int j = 0; j < finishedArray.length; j++ )
        {
            newCharArray[ j ] = finishedArray[ j ];
        }
        newCharArray[ finishedArray.length ] = arrayToCheck[ i ];
        finishedArray = newCharArray;
    }
}
//finishedArray contains desired result
如果您可以更改数据结构并且使用字符串来包含字符,那么列表将是更合适的工具。

List<String> finishedList = Arrays.asList( 'a', 'b', 'c', 'd', 'e', 'f', 'g' );
for( String charInList : finishedList )
{
    if( doesNOTMeetSomeCondition( charInList.toCharArray()[ 0 ] ) )
    {
        finishedList.remove( charInList );
    }
}
//finishedList contains the desired result

答案 5 :(得分:1)

你的程序有些不对劲:

String s;
char[] b = inputString.toCharArray();
b = new char[b.length];
do {
    if(!(b[i]>='0')&&(b[i]<='9')&&(b[i]!='.')) {
        ...
    }
} while...

您正在使用char[]创建inputString,然后在下一行中为char[]变量指定一个全新的空bb[i]实际上永远不会等于09i。你错误地把这条线放在了这里吗?

然后对于删除的东西,我建议使用一个ArrayList,你可以在其中迭代它并非常容易地删除你想要的特定索引。{/ p>