Solución:
En Java, no puede eliminar elementos de una matriz. Pero puedes:
Crear un nuevo char[]
copiando solo los elementos que desea conservar; para esto podrías usar System.arraycopy()
o incluso más simpleArrays.copyOfRange()
. Por ejemplo, para copiar solo los primeros tres caracteres de una matriz:
char[] array1 = {'h','m','l','e','l','l'};
char[] array2 = Arrays.copyOfRange(array1, 0, 3);
O usa un List<Character>
, que le permite obtener una sublista con una variedad de elementos:
List<Character> list1 = Arrays.asList('h','m','l','e','l','l');
List<Character> list2 = list1.subList(0, 3);
Función de Java para eliminar un carácter de una matriz de caracteres:
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;
}
El método anterior imprime el mensaje con el índice 21 eliminado. Puede colocar esto en un bucle para eliminar varios elementos. Técnicamente, no está eliminando un elemento, está creando una nueva matriz de caracteres con el elemento eliminado. Tienes que recorrer toda la cadena para cada eliminación, lo cual es muy ineficiente.
Elimine un carácter por índice de una matriz de caracteres con StringBuilder en 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"
El código anterior elimina el signo de exclamación de la matriz de caracteres. Si desea eliminar un RANGO de caracteres, use sb.delete(10, 15);