code: public UTF8String trimLeft(UTF8String trimString) {
      if (trimString == null) return null;
      // the searching byte position in the source string
      int srchIdx = 0;
      // the first beginning byte position of a non-matching character
      int trimIdx = 0;
  
      while (srchIdx < numBytes) {
        UTF8String searchChar = copyUTF8String(
            srchIdx, srchIdx + numBytesForFirstByte(this.getByte(srchIdx)) - 1);
        int searchCharBytes = searchChar.numBytes;
        // try to find the matching for the searchChar in the trimString set
        if (trimString.find(searchChar, 0) >= 0) {
          trimIdx += searchCharBytes;
        } else {
          // no matching, exit the search
          break;
        }
        srchIdx += searchCharBytes;
      }
  
      if (trimIdx >= numBytes) {
        // empty string
        return EMPTY_UTF8;
      } else {
        return copyUTF8String(trimIdx, numBytes - 1);
      }
    }
docs: Based on the given trim string, trim this string starting from left end
  This method searches each character in the source string starting from the left end, removes
  the character if it is in the trim string, stops at the first character which is not in the
  trim string, returns the new string.
  @param trimString the trim character string