code: public static List<String> extractSegmentTokens(String qualifiedName) {
          Preconditions.checkNotNull(qualifiedName);
          String originalSegmentName = isTransactionSegment(qualifiedName) ? getParentStreamSegmentName(qualifiedName) : qualifiedName;
  
          List<String> retVal = new LinkedList<>();
          String[] tokens = originalSegmentName.split("[/]");
          int segmentIdIndex = tokens.length == 2 ? 1 : 2;
          long segmentId;
          if (tokens[segmentIdIndex].contains(EPOCH_DELIMITER)) {
              String[] segmentIdTokens = tokens[segmentIdIndex].split(EPOCH_DELIMITER);
              segmentId = computeSegmentId(Integer.parseInt(segmentIdTokens[0]), Integer.parseInt(segmentIdTokens[1]));
          } else {
              // no secondary delimiter, set the secondary id to 0 for segment id computation
              segmentId = computeSegmentId(Integer.parseInt(tokens[segmentIdIndex]), 0);
          }
          retVal.add(tokens[0]);
          if (tokens.length == 3) {
              retVal.add(tokens[1]);
          }
          retVal.add(Long.toString(segmentId));
  
          return retVal;
      }
docs: Method to extract different parts of stream segment name.
  The tokens extracted are in following order scope, stream name and segment id.
  If its a transational segment, the transaction id is ignored.
  This function works even when scope is not set.
  
  @param qualifiedName StreamSegment's qualified name.
  @return tokens capturing different components of stream segment name. Note: segmentId is extracted and sent back
  as a String