Вы можете использовать
(\b.{1,32}(?![\w-])\W?)
Подробности
\b
- граница слова .{1,32}
- от 1 до32 символа, кроме символов перевода строки, как можно больше (?![\w-])
- символ, расположенный слева от текущего местоположения, не может быть словом (буква, цифра или _
) или -
символ \W?
- необязательный символ без слова.
В Java используйте следующий метод:
public static String[] splitIncludeDelimeter(String regex, String text){
List<String> list = new LinkedList<>();
Matcher matcher = Pattern.compile(regex).matcher(text);
int now, old = 0;
while(matcher.find()){
now = matcher.end();
list.add(text.substring(old, now));
old = now;
}
if(list.size() == 0)
return new String[]{text};
//adding rest of a text as last element
String finalElement = text.substring(old);
list.add(finalElement);
return list.toArray(new String[list.size()]);
}
Пример Java :
String s = "Half Bone-in Spiral int with dark Packd Smithfield Half Bone-in Spiral Ham with Glaze Pack";
String[] res = splitIncludeDelimeter("(\\b.{1,32}(?![\\w-])\\W?)", s);
System.out.println(Arrays.toString(res));
// => [Half Bone-in Spiral int with , dark Packd Smithfield Half , Bone-in Spiral Ham with Glaze , Pack, ]