Java char Array - удаление элементов

В Java я хочу удалить определенные элементы из массива char, чтобы он выполнял что-то вроде:

char[] Array1 = {'h','m','l','e','l','l'};
Array1 = //character index[2] to character index[5]

Как это может быть сделано?

5 ответов

Решение

В Java вы не можете удалять элементы из массива. Но вы можете либо:

Создать новый char[] копирование только тех элементов, которые вы хотите сохранить; для этого вы можете использовать System.arraycopy()или даже проще Arrays.copyOfRange(), Например, для копирования только первых трех символов массива:

char[] array1 = {'h','m','l','e','l','l'};
char[] array2 = Arrays.copyOfRange(array1, 0, 3);

Или используйте List<Character>, что позволяет получить подсписок с рядом элементов:

List<Character> list1 = Arrays.asList('h','m','l','e','l','l');
List<Character> list2 = list1.subList(0, 3);

Ты можешь использовать Arrays.copyOfRange как это:

array1 = Arrays.copyOfRange(array1, 2, 5);

Больше информации

Java-функция для удаления символа из символьного массива:

String msg = "johnny can't program, he can only be told what to type";
char[] mychararray = msg.toCharArray();
mychararray = remove_one_character_from_a_character_array_in_java(mychararray, 21);
System.out.println(mychararray);

public char[] remove_one_character_from_a_character_array_in_java(
                           char[] original, 
                           int location_to_remove)
{
    char[] result = new char[original.length-1];
    int last_insert = 0;
    for (int i = 0; i < original.length; i++){
        if (i == location_to_remove)
            i++;

        result[last_insert++] = original[i];
    }
    return result;
}

Вышеуказанный метод печатает сообщение с удаленным индексом 21. Вы можете поместить это в цикл, чтобы удалить несколько элементов. Технически вы не удаляете элемент, вы создаете новый массив символов с удаленным элементом. Вы должны пройти всю строку для каждого удаления, что очень неэффективно.

Удалить символ по индексу из массива символов с помощью StringBuilder в Java:

String mystring = "inflation != stealing";
char[] my_char_array = mystring.toCharArray();
StringBuilder sb = new StringBuilder();
sb.append(mystring);
sb.deleteCharAt(10);
my_char_array = sb.toString().toCharArray();
System.out.println(my_char_array);             //prints "inflation = stealing"

Приведенный выше код удаляет восклицательный знак из массива символов. Если вы хотите удалить ряд символов, используйте sb.delete(10, 15);

Вы можете использовать этот метод:

public static char[] copyArray(char[] original, int start, int length)
{
    char[] result = new char[length];
    for (int i = 0; i < length; i++)
    {
        result[i] = original[start + i];
    }
    return result;
}

Да, вы можете использовать метод Arrays.copyOfRange(char[], начальный индекс, конечный индекс).

Вы также можете просмотреть это -

http://www.codingdiary.com/developers/developers/diary/javaapi/java/util/SampleCode/CopyofRange8ArrayExampleCode.html

Другие вопросы по тегам