2010-11-04 35 views
6

Duplicar posibles:
Split string to equal length substrings in JavaSeparar una cadena en trozos de longitud N en Java

Dado el siguiente método de utilidad que tengo:

/** 
* Splits string <tt>s</tt> into chunks of size <tt>chunkSize</tt> 
* 
* @param s the string to split; must not be null 
* @param chunkSize number of chars in each chuck; must be greater than 0 
* @return The original string in chunks 
*/ 
public static List<String> splitInChunks(String s, int chunkSize) { 
    Preconditions.checkArgument(chunkSize > 0); 
    List<String> result = Lists.newArrayList(); 
    int length = s.length(); 
    for (int i = 0; i < length; i += chunkSize) { 
     result.add(s.substring(i, Math.min(length, i + chunkSize))); 
    } 
    return result; 
} 

1) Es existe un método equivalente en cualquier biblioteca Java común (como Apache Com mons, Google Guava) para poder descartarlo de mi código base. No se pudo encontrar con un vistazo rápido. No importa si devuelve una matriz o una Lista de cadenas.

(Obviamente no añadiría la dependencia a un enorme marco sólo por esto, pero siento libre de mencionar lib común, tal vez lo uso ya.)

2) Si no, ¿hay alguna más sencillo y una forma más limpia de hacer esto en Java? ¿O una forma que es sorprendentemente más eficiente? (Si usted sugiere una solución basada en expresiones regulares, por favor, también considerar la limpieza en el sentido de la legibilidad de expertos no de expresiones regulares ... :-)

Editar: esto califica como un duplicado de la pregunta "Split string to equal length substrings in Java" debido this Guava solution que responde perfectamente a mi pregunta!

+0

Acepto que es un duplicado. O, mejor dicho, la pregunta no es un engaño exacto, pero las respuestas contienen su [bella solución de guayaba] (http://stackoverflow.com/questions/3760152/split-string-of-equal-lengths-in-java/ 3760862 # 3760862) que es exactamente lo que quiero! – Jonik

+0

@seanizer: miré la clase 'Strings' de Guava, pero me había perdido completamente la existencia de' Splitter'. – Jonik

Respuesta

11

Usted puede hacer esto con Splitter de guayaba:

Splitter.fixedLength(chunkSize).split(s) 

... que devuelve un Iterable<String>.

Algunos ejemplos más en this answer.

+0

No merezco el crédito. Arranqué ese derecho del código del OP. – jjnguy

+0

Por supuesto, descargaría mi propio método de utilidad y usaría Splitter directamente ahora que me doy cuenta, pero gracias por señalar que Guava puede hacer esto. – Jonik

+0

Heh, esto va a estar cerrado, y la respuesta que me gustaría aceptar es [esto] (http://stackoverflow.com/questions/3760152/split-string-to-equal-length-substrings-in- java/3760862 # 3760862) ... Hmm, pero espera, déjame editar esta respuesta primero a mi gusto, y te daré los puntos extra. :-) – Jonik

Cuestiones relacionadas