docs: public List<StrPosition> splitByIndexWithDetail(String srcStr, Integer... splitPoint) {
  
          final List<StrPosition> resultList = new ArrayList<StrPosition>();
          if (splitPoint == null || splitPoint.length == 0) {
              return resultList;
          }
  
          int cursor = 0;
  
          int cutStartIndex = 0, cutEndIndex = 0;
  
          final int lastCharIndex = srcStr.length() - 1;
  
          for (int i = 0; i < splitPoint.length; i++) {
  
              cutStartIndex = cursor;
              cutEndIndex = splitPoint[i];
  
              if (cutEndIndex < 0) {
                  continue;
              }
  
              if (cutStartIndex > lastCharIndex) {
                  break;
              }
  
              if (cutEndIndex > lastCharIndex) {
                  cutEndIndex = lastCharIndex;
              }
  
              final String blockStr = substring(srcStr, cutStartIndex, cutEndIndex);
  
              final StrPosition strPos = new StrPosition();
              strPos.str = blockStr;
              strPos.startIndex = cutStartIndex;
              strPos.endIndex = cutEndIndex;
  
              resultList.add(strPos);
  
              cursor = cutEndIndex + 1;
  
          }
  
          if (cutEndIndex < lastCharIndex) {
              // if the cursor did not go to the last, add the rest of string.
              cutEndIndex = lastCharIndex;
              cutStartIndex = cursor;
              String lastBlockStr = substring(srcStr, cutStartIndex, cutEndIndex);
  
              final StrPosition strPos = new StrPosition();
              strPos.str = lastBlockStr;
              strPos.startIndex = cutStartIndex;
              strPos.endIndex = cutEndIndex;
              resultList.add(strPos);
  
          }
  
          return resultList;
      }