All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.snowflake.common.util.StringUtil Maven / Gradle / Ivy

There is a newer version: 5.1.4
Show newest version
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.snowflake.common.util;

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

/**
 *
 * @author jhuang
 */
public class StringUtil
{

  public static Pattern octalCode = Pattern.compile(
          "^\\\\0*(([0-7])|([0-7][0-7])|([0-3][0-7][0-7]))$");

  /**
   * TODO: currently we only do escape sequence replacement for special strings
   * that are used in table stage area file format. We don't do general
   * replacement for escape sequence in any string, which is something we
   * should do for any string literal later.
   */
  static Map escapeSequenceToCharMap = new HashMap();

  static
  {
    escapeSequenceToCharMap.put("\\\"", String.valueOf((char) '"'));
    escapeSequenceToCharMap.put("\\0", String.valueOf((char) '\0')); // nul
    escapeSequenceToCharMap.put("\\f", String.valueOf((char) '\f')); //form feed
    escapeSequenceToCharMap.put("\\t", String.valueOf((char) '\t')); // tab
    escapeSequenceToCharMap.put("\\n", String.valueOf((char) '\n')); // newline
    escapeSequenceToCharMap.put("\\r", String.valueOf((char) '\r')); // return
    escapeSequenceToCharMap.put("\\\\", String.valueOf((char) '\\')); // backslash
  }

  /**
   * A small function to check if a string is an octal value and if so, convert
   * it to the internal value the octal value represents. If not, it returns
   * the original value.
   *
   * TODO: change this to handle octal value in any string, instead of
   * octal value only string.
   * 
   * @param value a string including an octal value
   * @return a character
   */
  public static String checkAndConvertOctalToChar(String value)
  {
    if (octalCode.matcher((value)).matches())
    {
      try
      {
        return StringUtil.convertOctalToChar(value);
      }
      catch (NumberFormatException ex)
      {
        return value;
      }
    }

    return value;
  }
  /**
   * Converts a string including an octal value to an character
   * @param value a string including an octal value
   * @return a character
   */
  public static String convertOctalToChar(String value)
  {
    if (value.startsWith("\\"))
    {
      value = value.substring(1);
    }

    // Convert Octal(base8) to decimal(base 10).
    Integer valueInDecimal = Integer.parseInt(value, 8);

    // Cast decimal to its corresponding ASCII value.
    char valueInChar = (char)valueInDecimal.intValue();
    return String.valueOf(valueInChar);
  }

  /**
   * Converts a string including an octal value to a character
   * @param value a string including an octal value
   * @return a character
   */
  public static String convertHexToChar(String value)
  {
    if (value.toLowerCase().startsWith("0x"))
    {
      value = value.substring(2);
    }

    // Convert Hex(base16) to decimal(base 10).
    Integer valueInDecimal = Integer.parseInt(value, 16);

    // Cast decimal to its corresponding ASCII value.
    char valueInChar = (char)valueInDecimal.intValue();
    return String.valueOf(valueInChar);
  }

  /**
   * Converts escape sequence to a char
   * @param value an escape sequence
   * @return a char
   */
  public static String convertEscapedSequenceToChar(String value)
  {
    return escapeSequenceToCharMap.get(value);
  }

  /**
   * return a quoted string if the string itself contains a quote.
   *
   * @param str a string
   * @return a quoted string if a double quote is included otherwise the
   * original string
   */
  public static String quote(String str)
  {
    // Double quote identifiers only if they contain quotes
    if (str.contains("\""))
    {
      return '"' + str + '"';
    }

    return str;
  }

  /**
   * Is pure ASCII characters?
   * @param s a string
   * @return true if the string contains pure ASCII characters otherwise false
   */
  public static boolean isPureAscii(String s)
  {
    // 7 bit ascii
    CharsetEncoder asciiEncode = Charset.forName("US-ASCII").newEncoder();
    return asciiEncode.canEncode(s);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy