2010-11-04 13 views
6

Eventuali duplicati:
Split string to equal length substrings in Javasuddivisione di un testo in blocchi n-length in Java

Dato il seguente metodo di utilità che ho:

/** 
* 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) è esiste un metodo equivalente in qualsiasi libreria Java comune (come Apache Com mons, Google Guava), quindi potrei buttarlo via dalla mia base di codice? Impossibile trovare con un rapido sguardo. Non importa se restituisce un array o un elenco di stringhe.

(Ovviamente non vorrei aggiungere la dipendenza di un enorme quadro solo per questo, ma sentitevi liberi di parlare di qualsiasi lib comune, forse lo uso già.)

2) In caso contrario, c'è un po 'più semplice e un modo più semplice per farlo in Java? O un modo sorprendentemente più performante? (Se si suggerire una soluzione regex-based, perche anche pulizia, nel senso di leggibilità per gli esperti non regex ... :-)

Modifica: questo si qualifica come un duplicato della domanda "Split string to equal length substrings in Java" a causa della this Guava solution che risponde perfettamente alla mia domanda!

+0

Sono d'accordo è un duplicato. O, piuttosto, la domanda non è un duplicato esatto, ma le risposte contengono la tua [bella soluzione Guava] (http://stackoverflow.com/questions/3760152/split-string-of-equal-lengths-in-java/ 3760862 # 3760862) che è esattamente quello che voglio! – Jonik

+0

@seanizer: ho visto la classe 'Strings' di Guava, ma avevo completamente perso l'esistenza di' Splitter'. – Jonik

risposta

11

Si può fare questo con Splitter di Guava:

Splitter.fixedLength(chunkSize).split(s) 

... che restituisce un Iterable<String>.

Altri esempi in this answer.

+0

Non merito il merito. L'ho strappato proprio dal codice OP. – jjnguy

+0

Ovviamente, vorrei scaricare il mio metodo di utilità e usare Splitter direttamente ora che ne sono a conoscenza, ma grazie per aver segnalato Guava può farlo! – Jonik

+0

Heh, questo sarà chiuso e la risposta che vorrei accettare è [questo] (http://stackoverflow.com/questions/3760152/split-string-to-equal-length-substrings-in- java/3760862 # 3760862) ... Hmm, ma aspetta, fammi modificare prima questa risposta a mio piacimento, e ti darò i punti extra. :-) – Jonik

Problemi correlati