Java字符数组-删除元素

6
在Java中,我想要从字符数组中删除某些元素,使其执行以下操作:
char[] Array1 = {'h','m','l','e','l','l'};
Array1 = //character index[2] to character index[5]

这该怎么做呢?
5个回答

12
在 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);

如何复制特定元素,因为我想要:'code'(char[] example = //从第一个字符到倒数第三个)。是否有范围方法或类似的东西? - user1516514

2

从字符数组中删除一个字符的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的字符,并打印了结果。你可以在循环中使用它来移除多个字符。实际上,你并没有删除一个字符,而是创建了一个新的char数组,将该字符删除。每次移除都需要遍历整个字符串,效率非常低下。

使用Java中的StringBuilder通过索引从字符数组中删除字符:

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);


我们如何使用O(1)空间来实现这个? - Geoff Langenderfer

2
您可以像这样使用Arrays.copyOfRange
array1 = Arrays.copyOfRange(array1, 2, 5);

更多信息


0

0

你可以使用这个方法:

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

5
你可以使用 Arrays.copyOfRange(char[], int, int) 方法。 - Paul Bellora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接