code: private String nextString(char quote) throws IOException {
          StringBuilder builder = null;
          do {
              /* the index of the first character not yet appended to the builder. */
              int start = pos;
              while (pos < limit) {
                  int c = buffer[pos++];
  
                  if (c == quote) {
                      if (skipping) {
                          return "skipped!";
                      } else if (builder == null) {
                          return stringPool.get(buffer, start, pos - start - 1);
                      } else {
                          builder.append(buffer, start, pos - start - 1);
                          return builder.toString();
                      }
                  } else if (c == '\\') {
                      if (builder == null) {
                          builder = new StringBuilder();
                      }
                      builder.append(buffer, start, pos - start - 1);
                      builder.append(readEscapeCharacter());
                      start = pos;
                  }
              }
  
              if (builder == null) {
                  builder = new StringBuilder();
              }
              builder.append(buffer, start, pos - start);
          } while (fillBuffer(1));
  
          throw syntaxError("Unterminated string");
      }
docs: Returns the string up to but not including {@code quote}, unescaping any
  character escape sequences encountered along the way. The opening quote
  should have already been read. This consumes the closing quote, but does
  not include it in the returned string.
  
  @param quote either ' or ".
  @throws NumberFormatException if any unicode escape sequences are
  malformed.