1

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

这是我到目前为止的代码

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
        }
4

6 回答 6

2

因为注释不允许良好的代码格式:

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

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

所以之后的循环适用于默认初始化的数组,而不是字符串内容。您需要两个数组引用来进行复制。

于 2012-07-30T19:00:03.217 回答
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();
于 2012-07-30T18:37:27.600 回答
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 ,您将能够对其进行迭代并轻松删除要删除的特定索引

于 2012-07-30T19:00:04.437 回答
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
于 2012-07-30T18:45:39.707 回答
1

在这里使用switch声明可能是一个更好的主意。与其从数组中消除你不想要的字符(迭代期间的突变是邪恶的,除非你使用 an Iterator),你为什么不使用StringBuilder类来捕获你想要的所有字符

于 2012-07-30T18:35:49.270 回答
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();

我认为这样的事情对你有用。

于 2012-07-30T18:36:20.830 回答