Data Type Java

import java.util.StringTokenizer;
/* Copyright (c) 2008 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package com.google.gdata.util.common.base;
/**
 * Some common string manipulation utilities.
 */
public class Util{
    /**
     * Unescape any MySQL escape sequences.
     * See MySQL language reference Chapter 6 at
     * http://www.mysql.com/doc/.
     * This function will not work for other SQL-like
     * dialects.
     * @param s string to unescape, with the surrounding quotes.
     * @return unescaped string, without the surrounding quotes.
     * @exception IllegalArgumentException if s is not a valid MySQL string.
     */
    public static String unescapeMySQLString(String s)
        throws IllegalArgumentException {
      // note: the same buffer is used for both reading and writing
      // it works because the writer can never outrun the reader
      char chars[] = s.toCharArray();
      // the string must be quoted 'like this' or "like this"
      if (chars.length < 2 || chars[0] != chars[chars.length-1] ||
          (chars[0] != '\'' && chars[0] != '"')) {
        throw new IllegalArgumentException("not a valid MySQL string: " + s);
      }
      // parse the string and decode the backslash sequences; in addition,
      // quotes can be escaped 'like this: ''', "like this: """, or 'like this: "'
      int j = 1;  // write position in the string (never exceeds read position)
      int f = 0;  // state: 0 (normal), 1 (backslash), 2 (quote)
      for (int i = 1; i < chars.length - 1; i++) {
        if (f == 0) {             // previous character was normal
    if (chars[i] == '\\') {
      f = 1;  // backslash
    } else if (chars[i] == chars[0]) {
      f = 2;  // quoting character
    } else {
      chars[j++] = chars[i];
    }
        } else if (f == 1) {      // previous character was a backslash
    switch (chars[i]) {
      case '0':   chars[j++] = '\0';   break;
      case '\'':  chars[j++] = '\'';   break;
      case '"':   chars[j++] = '"';    break;
      case 'b':   chars[j++] = '\b';   break;
      case 'n':   chars[j++] = '\n';   break;
      case 'r':   chars[j++] = '\r';   break;
      case 't':   chars[j++] = '\t';   break;
      case 'z':   chars[j++] = '\032'; break;
      case '\\':  chars[j++] = '\\';   break;
      default:
        // if the character is not special, backslash disappears
        chars[j++] = chars[i];
        break;
    }
    f = 0;
        } else {                  // previous character was a quote
    // quoting characters must be doubled inside a string
    if (chars[i] != chars[0]) {
      throw new IllegalArgumentException("not a valid MySQL string: " + s);
    }
    chars[j++] = chars[0];
    f = 0;
        }
      }
      // string contents cannot end with a special character
      if (f != 0) {
        throw new IllegalArgumentException("not a valid MySQL string: " + s);
      }
      // done
      return new String(chars, 1, j - 1);
    }
}