2011-10-29 9 views
16

Tengo una matriz de esta manera:eliminar una cadena específica de un array de cadenas

String n[] = {"google","microsoft","apple"}; 

Lo que quiero hacer es quitar "manzana".

Mi problema es muy básico, sin embargo, busqué en el sitio web y descubrí que java no es compatible con la función de eliminación de una matriz. También oí usar Java Utils, porque es muy simple eliminar un elemento .... Traté de encontrar Java Utils en google, pero casi todos los enlaces están muertos.

Así que finalmente ... ¿hay alguna manera de eliminar una cadena de una matriz de cadena?

¡Incluso si uso una ArrayList no puedo encontrar un método para generar un elemento aleatorio en ella! Por ejemplo: en una matriz normal, genero una cadena como esta:

String r = myAL[rgenerator.nextInt(myAL.length)]; 

En un ArrayList no funciona .... tal vez usted conoce a una solución ...

+0

probablemente has sido referido al paquete 'java.util', que contiene algunas de las personas siguientes clases están utilizando para responder a su pregunta, como' 'list' y ArrayList', y que viene con el estándar Biblioteca Java: no es necesario realizar una descarga por separado. –

+5

¡NO! Desea eliminar Microsoft. –

Respuesta

26

definen "eliminar".

Las matrices son de longitud fija y no pueden redimensionarse una vez creadas.Puede establecer un elemento en null para eliminar una referencia de objeto;

for (int i = 0; i < myStringArray.length(); i++) 
{ 
    if (myStringArray[i].equals(stringToRemove)) 
    { 
     myStringArray[i] = null; 
     break; 
    } 
} 

o

myStringArray[indexOfStringToRemove] = null; 

Si desea una matriz dinámica de tamaño, donde en realidad se retira el objeto y la lista (array) de tamaño se ajusta en consecuencia, utilizar un ArrayList<String>

myArrayList.remove(stringToRemove); 

o

myArrayList.remove(indexOfStringToRemove); 

Editar en respuesta a la edición de OP a su pregunta y comentario abajo

String r = myArrayList.get(rgenerator.nextInt(myArrayList.size())); 
+0

está bien, pero también necesito generar un elemento aleatorio de esa lista ... En una matriz normal, es fácil de hacer, sin embargo, en una lista de arrays es bastante difícil ... Si sabes cómo, por favor dime ... – user1015311

+0

¿Por qué? ¿Sería "difícil de hacer"? Un ArrayList le da el mismo acceso aleatorio que una matriz (a través del índice). Ver mi edición arriba. –

+1

Recomiendo usar (myStringArray [i] .equalsIgnoreCase (stringToRemove)). Esto asegurará que no importa el tipo de entrada del usuario, la carcasa no evite que la cadena se elimine de la matriz. – Fergus

1

Arrays en Java aren' t dinámico, como clases de colección. Si desea una colección verdadera que admita la adición y eliminación dinámicas, use ArrayList <>. Si aún desea vivir con matrices de vanilla, busque el índice de cadena, construya una nueva matriz con un tamaño inferior al original y use System.arraycopy() para copiar los elementos antes y después. O escriba un ciclo de copiado con salto a mano, en arreglos pequeños la diferencia será insignificante.

1

No se puede eliminar nada de una matriz; siempre tienen una longitud fija. Una vez que haya creado una matriz de longitud 3, esa matriz siempre tendrá la longitud 3.

Será mejor que tenga una List<String>, p. un ArrayList<String>:

List<String> list = new ArrayList<String>(); 
list.add("google"); 
list.add("microsoft"); 
list.add("apple"); 
System.out.println(list.size()); // 3 

list.remove("apple"); 
System.out.println(list.size()); // 2 

colecciones de este tipo son generalmente mucho más flexible que trabajar con matrices directamente.

EDIT: Para la eliminación:

void removeRandomElement(List<?> list, Random random) 
{ 
    int index = random.nextInt(list.size()); 
    list.remove(index); 
} 
+0

está bien, pero también necesito generar un elemento aleatorio de esa lista ... En una matriz normal, es fácil de hacer, sin embargo, en una lista de arrays es bastante difícil ... Si sabes cómo, por favor dime ... – user1015311

+0

@ user1015311: No, lo harías de la misma manera que para una matriz: solo eliminas en función del índice en lugar del valor. Hay una sobrecarga de 'eliminar' tomando un' int'. Simplemente crea un número aleatorio en el rango '[0, list.size()]' y luego llama a 'list.remove (index);'. –

9

No es posible en el paso o que necesita para mantener la referencia a la matriz. Si puede cambiar la referencia de esto puede ayudar:

 String[] n = new String[]{"google","microsoft","apple"}; 
     final List<String> list = new ArrayList<String>(); 
     Collections.addAll(list, n); 
     list.remove("apple"); 
     n = list.toArray(new String[list.size()]); 

no recomiendo lo siguiente, pero si usted se preocupa por el rendimiento:

 String[] n = new String[]{"google","microsoft","apple"}; 
     final String[] n2 = new String[2]; 
     System.arraycopy(n, 0, n2, 0, n2.length); 
     for (int i = 0, j = 0; i < n.length; i++) 
     { 
     if (!n[i].equals("apple")) 
     { 
      n2[j] = n[i]; 
      j++; 
     }  
     } 

yo no lo recomiendo porque el código es mucho más difícil de leer y mantener

+0

Sin mencionar horriblemente ineficiente; toda esa copia no es gratis. Esta es la razón por la cual ArrayList fue inventada. –

0
import java.util.*; 

class Array { 
    public static void main(String args[]) { 
     ArrayList al = new ArrayList(); 
     al.add("google"); 
     al.add("microsoft"); 
     al.add("apple"); 
     System.out.println(al); 
     //i only remove the apple// 
     al.remove(2); 
     System.out.println(al); 
    } 
} 
Cuestiones relacionadas