code: public static List<String> smartWordSplit(String _text, int _len) {
          if (_text == null) {
              return null;
          }
  
          // if the given string is already shorter or equal to wanted length, return immediately
          if (_text.length() <= _len) {
              return TypeUtil.createList(_text);
          }
  
          List<String> list = new ArrayList<>();
  
          String[] result = _text.split("\\s");
          for (int x=0; x<result.length; x++) {
              if (result[x].length() > _len) {
                  list.addAll(splitEqually(result[x], _len));
              } else if (result[x].length() < _len) {
                  StringBuilder sb = new StringBuilder();
                  x = strAppender(result, sb, x, _len);
                  list.add(sb.toString());
              } else {
                  list.add(result[x]);
              }
          }
          return list;
      }
docs: Tries to split a string in a smart way.<br><br>
  
  String will be splitted by space and then recombined until each line has
  the given length or less than the given length, if the next token would cause
  the line to be longer than requested
  
  It is ensured that each line has a maximum length of _len, it could be short but never longer.
  
  @param _text text to split
  @param _len max length per line
  @return list or null if _text was null