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

これはあなたが望むことをするはずです:

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 に答える
2

コメントでは適切なコードフォーマットが許可されないため、次のようになります。

コードの先頭で、Stringコンテンツをaとして取得し、同じサイズchar[]のnewを変数に割り当てることで、すぐにコンテンツを失います。char[]

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

したがって、後のループは、文字列の内容ではなく、デフォルトで初期化された配列で機能します。コピーを行うには、2つの配列参照が必要です。

于 2012-07-30T19:00:03.217 に答える
1

switchここでステートメントを使用することをお勧めします。配列から不要な文字を削除するのではなく(を使用していない限り、反復中の変更は悪です)、必要なすべての文字をキャッチするためにクラスを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 に答える
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

プログラムに問題があります。

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[]ますb。実際には、、またはb[i]に等しくなることはありません。その行を誤ってここに入れましたか?09i

次に、削除することについては、ArrayListを使用することをお勧めします。この場合、ArrayListを繰り返し処理して、削除する特定のインデックスを非常に簡単に削除できます。

于 2012-07-30T19:00:04.437 に答える