2011-07-06 20 views
7

¿Cómo puedo crear/instancia de una matriz para ser igual a la subcadena de otra matriz, cuando no se conoce el tamaño de la subcadena:gama de Java subcadena

int n; //some number derived somewhere else 

String[] grp = elements[i] to elements[i+n]; 
+1

Qué quiere decir que desea crear y la matriz con los mismos valores que otro solo más largo en longitud? – RMT

+1

Una buena pregunta (no obvia). Tenga en cuenta que he sustituido la palabra "selección" por "subcadena" en la pregunta, que es la terminología que está buscando (aunque no es una cadena, sigue siendo la terminología correcta en términos de informática). – mgiuca

Respuesta

12

Uso Arrays.copyOfRange:

public static <T> T[] copyOfRange(T[] original, 
            int from, 
            int to) 

Copia el rango especificado de la matriz especificada en una nueva matriz. El índice inicial del rango (from) debe se encuentra entre cero y original.length, inclusive. El valor en original[from] se coloca en el elemento inicial de la copia (a menos que from == original.length o from == to). Los valores de los elementos subsiguientes en la matriz original se colocan en elementos subsiguientes en la copia. El final de índice de la gama (to), que debe ser mayor que o igual a de, puede ser mayor que original.length, en el que se coloca caso nulo en todas las elementos de la copia cuyo índice es mayor que o igual a original.length - from. La longitud de la matriz devuelta será to - from.

La matriz resultante es exactamente la misma clase que la matriz original.

En su caso:

String[] grp = Arrays.copyOfRange(elements, i, i + n); 
+0

'Arrays.copyOfRange (elementos, i, i + n)' excluiría 'elementos [i + n]'. Para incluirlo, debe usar 'Arrays.copyOfRange (elementos, i, i + n + 1)'. Pero tal vez el OP pretendía copiar n elementos, en cuyo caso su respuesta es correcta. –

8

Utilizará Arrays.copyOfRange().

Aquí se muestra un ejemplo:

String[] original = some array; 
String[] grp = Arrays.copyOfRange(original, i, i + n); 

El Javadocs para la clase Arrays tiene mucha información sobre el método:

+0

+1 respuesta + ejemplo – RMT

+0

+1. Debe agregar '+ 1' para incluir' elementos [i + n] 'en el rango. –

3

Uso Arrays.copyOfRange():

String[] grp = Arrays.copyOfRange(grp, i, i+n); 

Como su nombre implica grp se ser un copia de la matriz original y no una vista en i t. No puede tener vistas en la matriz, para eso necesitaría usar un collection. En general, las colecciones son la alternativa más potente y flexible de alto nivel a las matrices.

1

para obtener el tamaño de la matriz, que haría

String [] grp = new String[n + 1];//inclusive 

Entonces, todo lo que tiene que hacer es copiar los elementos más:

for(int x = 0;x < n + 1;x++) 
{ 
    grp[x] = elements[i + x];//I'm assuming you have "i" defined somewhere 
}