stringutils.java

来自「招标投标网上系统」· Java 代码 · 共 282 行

JAVA
282
字号
// %1028209237561:com.neusoft.im.util%

/* Auto record by SourceSafe
 *****************************************************************************
 *  $Workfile: StringUtils.java $
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *  $History: StringUtils.java $
 * 
 * *****************  Version 1  *****************
 * User: Lihg         Date: 03-12-10   Time: 8:44
 * Created in $/4 开发工作目录/src/COM/neusoft/im/util
 *
 * *****************  Version 1  *****************
 * User: Zhangdi      Date: 03-02-13   Time: 13:50
 * Created in $/IM1.2/classes/com/neusoft/im/util
 *
 * *****************  Version 1  *****************
 * User: Zhangdi      Date: 02-08-12   Time: 10:26
 * Created in $/portalserver/classes/com/neusoft/im/util
 *****************************************************************************
 */
package com.neusoft.util;

import java.text.*;
import java.util.*;

public class StringUtils {
  private static Hashtable escapeChar;
  private static final char[] hexDigit = {
      '0',
      '1',
      '2',
      '3',
      '4',
      '5',
      '6',
      '7',
      '8',
      '9',
      'A',
      'B',
      'C',
      'D',
      'E',
      'F'
  };
  private static final String specialSaveChars = "=: \t\r\n\f#!";

  static {
    escapeChar = new Hashtable(9);
    escapeChar.put("&", "&");
    escapeChar.put("'", "'");
    escapeChar.put("\"", """);
    escapeChar.put("<", "&#60;");
    escapeChar.put(">", "&#62;");

    escapeChar.put("&#38;", "&");
    escapeChar.put("&#39;", "'");
    escapeChar.put("&#34;", "\"");
    escapeChar.put("&#60;", "<");
    escapeChar.put("&#62;", ">");
  }

  /**
   * 将ISO8859-1编码的字符串转为GBK编码
   *
   * @param str <!-- 请描述方法的参数信息 -->
   * @return <!-- 请描述方法的返回信息 -->
   */
  public static String ISO2GB2312(String str) {
    return convertEncode(str, "ISO-8859-1", "GBK");
  }

  /**
   * @param str <!-- 请描述方法的参数信息 -->
   * @param srcEnc <!-- 请描述方法的参数信息 -->
   * @param dstEnc <!-- 请描述方法的参数信息 -->
   * @return <!-- 请描述方法的返回信息 -->
   * @deprecated 方法名“convertCode”不规范,请使用 {@link #convertEncode(String, String, String)},
   *             同时可参考使用{@link #convertEncode(String, String)}和 {@link #ISO2GB2312(String)}
   */
  public static String convertCode(String str, String srcEnc, String dstEnc) {
    return convertEncode(str, srcEnc, dstEnc);
  }

  /**
   * 将字符串转为指定的编码
   *
   * @param str <!-- 请描述方法的参数信息 -->
   * @param dstEnc <!-- 请描述方法的参数信息 -->
   * @return <!-- 请描述方法的返回信息 -->
   */
  public static String convertEncode(String str, String dstEnc) {
    try {
      return new String(str.getBytes(), dstEnc);
    }
    catch (Exception e) {
      return str;
    }
  }

  /**
   * 将字符串从特定的编码转换到指定的编码
   *
   * @param str <!-- 请描述方法的参数信息 -->
   * @param srcEnc <!-- 请描述方法的参数信息 -->
   * @param dstEnc <!-- 请描述方法的参数信息 -->
   * @return <!-- 请描述方法的返回信息 -->
   */
  public static String convertEncode(String str, String srcEnc, String dstEnc) {
    try {
      return new String(str.getBytes(srcEnc), dstEnc);
    }
    catch (Exception e) {
      return str;
    }
  }

  /**
   * 将字符串中的"&#38;","&#39;","&#34;","&#60;","&#62;"转为"&#38;#38;","&#38;#39;","&#38;#34;","&#38;#60;","&#38;#62;"
   *
   * @param to_process <!-- 请描述方法的参数信息 -->
   * @return <!-- 请描述方法的返回信息 -->
   */
  public static String escape(String to_process) {
    if ( (to_process == null) || (to_process.length() == 0)) {
      return "";
    }

    StringBuffer bs = new StringBuffer();
    StringCharacterIterator sci = new StringCharacterIterator(to_process);
    String tmp = null;

    for (char c = sci.first(); c != CharacterIterator.DONE; c = sci.next()) {
      tmp = String.valueOf(c);

      if (escapeChar.containsKey(tmp)) {
        tmp = (String) escapeChar.get(tmp);
      }

      bs.append(tmp);
    }

    return (bs.toString());
  }

  /**
   * 将字符串转换为&#92;uXXXX的UNICODE表示方法
   *
   * @param theString <!-- 请描述方法的参数信息 -->
   * @param escapeSpace <!-- 请描述方法的参数信息 -->
   * @return <!-- 请描述方法的返回信息 -->
   */
  public static String nativeToAscii(String theString, boolean escapeSpace) {
    int len = theString.length();
    StringBuffer outBuffer = new StringBuffer(len * 2);

    for (int x = 0; x < len; x++) {
      char aChar = theString.charAt(x);

      switch (aChar) {
        case ' ':

          if ( (x == 0) || escapeSpace) {
            outBuffer.append('\\');
          }

          outBuffer.append(' ');

          break;

        case '\\':
          outBuffer.append('\\');
          outBuffer.append('\\');

          break;

        case '\t':
          outBuffer.append('\\');
          outBuffer.append('t');

          break;

        case '\n':
          outBuffer.append('\\');
          outBuffer.append('n');

          break;

        case '\r':
          outBuffer.append('\\');
          outBuffer.append('r');

          break;

        case '\f':
          outBuffer.append('\\');
          outBuffer.append('f');

          break;

        default:

          if ( (aChar < 0x0020) || (aChar > 0x007e)) {
            outBuffer.append('\\');
            outBuffer.append('u');
            outBuffer.append(toHex( (aChar >> 12) & 0xF));
            outBuffer.append(toHex( (aChar >> 8) & 0xF));
            outBuffer.append(toHex( (aChar >> 4) & 0xF));
            outBuffer.append(toHex(aChar & 0xF));
          }
          else {
            if (specialSaveChars.indexOf(aChar) != -1) {
              outBuffer.append('\\');
            }

            outBuffer.append(aChar);
          }
      }
    }

    return outBuffer.toString();
  }

  /**
   * 将字符串中的"&#38;#38;","&#38;#39;","&#38;#34;","&#38;#60;","&#38;#62;"转为"&#38;","&#39;","&#34;","&#60;","&#62;"
   *
   * @param to_process <!-- 请描述方法的参数信息 -->
   * @return <!-- 请描述方法的返回信息 -->
   */
  public static String unescape(String to_process) {
    if ( (to_process == null) || (to_process.length() == 0)) {
      return "";
    }

    StringBuffer bs = new StringBuffer();
    StringBuffer tmp = new StringBuffer();
    StringCharacterIterator sci = new StringCharacterIterator(to_process);
    boolean flag = false;

    for (char c = sci.first(); c != CharacterIterator.DONE; c = sci.next()) {
      if (c == '&') {
        flag = true;

        if (tmp.length() > 0) {
          bs.append(tmp);
          tmp.delete(0, tmp.length());
        }
      }

      if (flag) {
        tmp.append(c);

        if (c == ';') {
          if (escapeChar.containsKey(tmp.toString())) {
            bs.append(escapeChar.get(tmp.toString()));
          }
          else {
            bs.append(tmp);
          }

          tmp.delete(0, tmp.length());
          flag = false;
        }
      }
      else {
        bs.append(c);
      }

    }

    if (tmp.length() > 0) {
      bs.append(tmp);
    }

    return (bs.toString());
  }

  private static char toHex(int nibble) {
    return hexDigit[ (nibble & 0xF)];
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?