public Double read(ShortTermMemoryReader reader) throws RowColumnReaderException {
    try {
      IntegerReadService.removeSpaces(reader);
      char c = (char) reader.read();
      if (Character.isDigit(c) || c == '-' || c == '+') {
        StringBuilder sb = new StringBuilder();
        sb.append(c);
        IntegerReadService.readDigitStar(reader, sb);
        c = (char) reader.read();
        if (c == '.') {
          sb.append(c);
          IntegerReadService.readDigitStar(reader, sb);
          c = (char) reader.read();
        }

        if (c == 'e' || c == 'E') {
          sb.append(c);
          c = (char) reader.read();
          if (c == '-' || c == '+') {
            sb.append(c);
          } else {
            IntegerReadService.back(c, reader);
          }
          IntegerReadService.readDigitStar(reader, sb);
        } else {
          IntegerReadService.back(c, reader);
        }
        return Double.parseDouble(sb.toString());
      }
      throw new Exception("Unexpected symbol " + c);
    } catch (Exception e) {
      throw reader.getException("Double Parser Error " + e.getMessage());
    }
  }
 public static void removeSpaces(ShortTermMemoryReader reader) throws IOException {
   char c = (char) reader.read();
   while (Character.isSpaceChar(c)) {
     c = (char) reader.read();
   }
   back(c, reader);
 }
 public static void readDigitStar(ShortTermMemoryReader reader, StringBuilder sb)
     throws IOException {
   char c = (char) reader.read();
   while (Character.isDigit(c)) {
     sb.append(c);
     c = (char) reader.read();
   }
   back(c, reader);
 }