Вопрос по arrays, java – Как удалить определенный элемент из массива [duplicate]

1

This question already has an answer here:

How to remove element from an array 4 answers

Я проверил различные элементы в массиве символов, и если они не удовлетворяют условиям, я хочу удалить их из массива. Есть ли способ сделать это?

Вот мой код софар

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
        }
Что вы уже сделали? kosa
Вы пробовали что-нибудь? Можете ли вы показать нам код? talnicolas
только что проверил элементы с помощью цикла do ... while и оператора if. Мой int i увеличивается каждый цикл и проверяет элементы с помощью b [i]. imulsion
Вы не можете использоватьCollection? elias

Ваш Ответ

6   ответов
2

Поскольку комментарии не допускают правильного форматирования кода:

В начале вашего кода вы получаетеString содержание какchar[] и сразу же потерять его снова, назначив новыйchar[] одного размера с переменной.

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

поэтому цикл after работает с инициализированным по умолчанию массивом, а не с содержимым строки. Вам нужно две ссылки на массив для копирования.

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] на самом деле никогда не будет равным0, 9 или жеi, Вы поместили эту строку здесь по ошибке?

Затем для удаления я предлагаю также использовать ArrayList, где вы сможете перебирать его и удалять конкретный индекс, который хотитеУдалить очень легко.

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();
я хочу удалить символ из chararray
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();

Мне кажется, что-то подобное сработает для тебя.

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 было бы гораздо более подходящим инструментом, если вы можете изменить структуру данных и удобно использовать строки для хранения символов.

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
1

Возможно, было бы лучше использоватьswitch Скажите здесь. Вместо удаления символа, который вам не нужен, из вашего массива (мутация во время итерации является злой, если вы не используетеIterator), почему вы не используетеStringBuilder класс, чтобы поймать всех персонажей, которых выdo хочу?

Похожие вопросы