Here a simply method to split a string in words and generate an array.
In this case I use a Length param to limit substring size.
...
public static String[] splitStringInWordsAndCreateArrayWithLineInSize(String input,Integer lineLength){
String[] words = input.split(" ");
List<String> list = new ArrayList<String>();
StringBuilder line = new StringBuilder();
for (int x = 0; x < words.length; x++) {
Boolean c = ((line.toString()+words[x]+" ").length()<lineLength);
if(c){
line.append(words[x]).append(" ");
}else{
list.add(line.toString());
line = new StringBuilder(words[x]).append(" ");
}
}
if(line.toString().length()>0){
list.add(line.toString());
}
Object[] arrObj = list.toArray();
String[] arrString = Arrays.copyOf(arrObj, arrObj.length, String[].class);
return arrString;
}
...
And here unit test:
...
@Test
public void testSplitStringInWordsAndCreateArrayWithLineInSize(){
String s = "Prodotti tricologici per la cura e la bellezza dei capelli,quali shampoo, lozioni per capelli, preparati per ondulare icapelli, preparati per effettuare la permanente dei capelli,tinture per capelli, gel per capelli, lacche e fissatori percapelli,preparati per ravvivare il colore dei capelli . ";
Integer lineLength = 62;
String[] out = FYStringUtils.splitStringInWordsAndCreateArrayWithLineInSize(s, lineLength);
StringBuilder rebuild = new StringBuilder();
for(int x=0;x<out.length;x++){
//System.out.println("x-"+out[x]);
assertThat(out.length<lineLength).isTrue();
rebuild.append(out[x]);
}
assertThat(rebuild.toString()).isEqualTo(s);
}
...