StringUtil 字符串处理的公共类

package com.kugisei.util;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import sun.util.logging.resources.logging;
import com.kugisei.exception.*;

/**
 
 * 字符串处理的公共类
 * </p>
 *
 *
 */
public class StringUtil {
 
 
 

 /**
  *
  * <p>
  * 删除传入的字符串中存在的全部全角和半角空格
  * </p>
  *
  * @version 1.0
  * @param str
  *            需要处理的字符串
  * @return 返回处理后的字符串
 
  *
  */
 public static String trimSpace(String str) {
  String str1 = null;
  if (str != null) {
   str1 = str.replace(' ', ' ');
   str1 = str1.replaceAll(" ", "");
  }
  return str1;
 }

 

 

 

 /**
  * 如果被检查的字符串为空或空字符串,返回表示html一个空格的转义符
  * @param 被检查的字符串
  * @return 返回检查、替换后的字符串
  * @see {@link #nvl(String, String)}
 
  *
  */
 public static String nvlHtml(String str1) {
  return nvl(str1, "&nbsp;");
 }

 /**
 
  * 如果第一个传入参数为空或者空字符串,则返回第二个参数,否则返回第一个参数
 
  *
  * @version 1.0
  * @param str1
  *            被检查的字符串
  * @param str2
  *            当str1为空或者空字符串时替换的字符串
  * @return 返回检查、替换后的字符串
  * @see {@link #isEmpty(String)}
 
  *
  */
 public static String nvl(String str1, String str2) {
  if (isNullOrEmpty(str1)) {
   return str2;
  } else {
   return str1;
  }
 }

 /**
  *
  * <p>
  * 检查字符串是否为空或者空字符串
  * </p>
  *
  * @version 1.0
  * @param 要检查的字符串
  * @return 被检查的字符串为空或空字符串返回true, 否则返回 false
  *
  */
 public static boolean isNullOrEmpty(String str) {
  if (str == null || "".equals(str)) {
   return true;
  } else {
   return false;
  }
 }

 /**
  *
  * <p>
  * 屏蔽传入字符串中的 &lt;script&gt;&lt;/script&gt;标签内的全部内容
  * </p>
  *
  * @version 1.0
  * @param 需要处理的字符串
  * @return 屏蔽script脚本后的字符串
  *
  */
 public static String filterScript(String str) {
  String regEx = "<[^<]*(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)([/t/n/r/f]|[^/t/n/r/f])*</(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)([^>])*>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(str);
  String s = m.replaceAll("");
  return s;
 }

 /**
  *
  * <p>
  * Copyright: Copyright (c) 2007
  * </p>
  * <p>
  * 将字符串中的特殊字符转换为html转义后的字符串
  * </p>
  *
  * @version 1.0
  * @param 需要转换的字符串
  * @return 返回值。没有返回值将其删除
  *
  */
 public static String toHtml(String str) {
  String targetStr = str;
  /**
   * 正常显示的字符串
   */
  String[] normalStrs = { "&", "/"", "<", ">", " ", "á", "à", "¤", "°",
    "÷", "é", "ê", "è", "í", "ì", "·", "ó", "ò", "±", "§", "×",
    "ú", "ù", "¨", "ü", "–", "—", "‘", "’", "“", "”", "‰", "…",
    "←", "↑", "→", "↓", "∈", "∏", "∑", "√", "∝", "∞", "∠", "∧",
    "∨", "∩", "∪", "∫", "∴", "≈", "≠", "≡", "≤", "≥" };

  /**
   * html转义后的字符串
   */
  String[] htmlStrs = { "&amp;", "&quot;", "&lt;", "&gt;", "&nbsp;",
    "&aacute;", "&agrave;", "&curren;", "&deg;", "&divide;",
    "&eacute;", "&ecirc;", "&egrave;", "&iacute;", "&igrave;",
    "&middot;", "&oacute;", "&ograve;", "&plusmn;", "&sect;",
    "&times;", "&uacute;", "&ugrave;", "&uml;", "&uuml;",
    "&ndash;", "&mdash;", "&lsquo;", "&rsquo;", "&ldquo;",
    "&rdquo;", "&permil;", "&hellip;", "&larr;", "&uarr;",
    "&rarr;", "&darr;", "&isin;", "&prod;", "&sum;", "&radic;",
    "&prop;", "&infin;", "&ang;", "&and;", "&or;", "&cap;",
    "&cup;", "&int;", "&there4;", "&asymp;", "&ne;", "&equiv;",
    "&le;", "&ge;" };

  for (int i = 0; i < normalStrs.length; i++) {
   targetStr = targetStr.replaceAll(normalStrs[i], htmlStrs[i]);
  }
  return targetStr;
 }

 /**
  * <p>
  * 将字符串中的html转义的字符串转换为正常字符
  * </p>
  *
  * @version 1.0
  * @param 需要转换的字符串
  * @return 返回值。没有返回值将其删除
  *
  */
 public static String toNormal(String str) {
  String targetStr = str;
  /**
   * 正常显示的字符串
   */
  String[] normalStrs = { "/"", "<", ">", " ", "á", "à", "¤", "°", "÷",
    "é", "ê", "è", "í", "ì", "·", "ó", "ò", "±", "§", "×", "ú",
    "ù", "¨", "ü", "–", "—", "‘", "’", "“", "”", "‰", "…", "←",
    "↑", "→", "↓", "∈", "∏", "∑", "√", "∝", "∞", "∠", "∧", "∨",
    "∩", "∪", "∫", "∴", "≈", "≠", "≡", "≤", "≥", "&" };

  /**
   * html转义后的字符串
   */
  String[] htmlStrs = { "&quot;", "&lt;", "&gt;", "&nbsp;", "&aacute;",
    "&agrave;", "&curren;", "&deg;", "&divide;", "&eacute;",
    "&ecirc;", "&egrave;", "&iacute;", "&igrave;", "&middot;",
    "&oacute;", "&ograve;", "&plusmn;", "&sect;", "&times;",
    "&uacute;", "&ugrave;", "&uml;", "&uuml;", "&ndash;",
    "&mdash;", "&lsquo;", "&rsquo;", "&ldquo;", "&rdquo;",
    "&permil;", "&hellip;", "&larr;", "&uarr;", "&rarr;", "&darr;",
    "&isin;", "&prod;", "&sum;", "&radic;", "&prop;", "&infin;",
    "&ang;", "&and;", "&or;", "&cap;", "&cup;", "&int;",
    "&there4;", "&asymp;", "&ne;", "&equiv;", "&le;", "&ge;",
    "&amp;" };

  for (int i = 0; i < normalStrs.length; i++) {
   targetStr = targetStr.replaceAll(htmlStrs[i], normalStrs[i]);
  }
  return targetStr;
 }

 /**
  *
  * <p>
  * 生成指定长度的随机字符串
  * </p>
  *
  * @version 1.0
  * @param size
  *            要生成字符串的长度
  * @return String 返回生成的随机字符串
  *
  */
 public static String getRandomString(int size) {
  char[] c = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'q',
    'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd',
    'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm' };
  Random random = new Random(new Date().getTime()); // 初始化随机数产生器
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < size; i++) {
   sb.append(c[Math.abs(random.nextInt()) % c.length]);
  }
  return sb.toString();
 }
   
 /**
  *
  * <p>
  * 生成指定长度的随机字符串(数字)
  * </p>
  *
  * @version 1.0
  * @param size
  *            要生成字符串的长度
  * @return String 返回生成的随机字符串
  *
  *
  */
 public static String getRandomNum(int size) {
  char[] c = { '1', '2', '3', '4', '5', '6', '7', '8', '9'};
  Random random = new Random(new Date().getTime()); // 初始化随机数产生器
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < size; i++) {
   sb.append(c[Math.abs(random.nextInt()) % c.length]);
  }
  return sb.toString();
 }
 
 /**
  *
  * <p>
  * 将字节转换为16进制表示的字符串
  * </p>
  *
  * @version 1.0
  * @param b
  *            需要转换的字节
  * @return 转换后的16进制表示的字符串
  *
  *
  */
 public static String toHEXString(byte b) {
  return ("" + "0123456789ABCDEF".charAt(0xf & b >> 4) + "0123456789ABCDEF"
    .charAt(b & 0xF));
 }

 /**
  *
  * <p>
  * 将字符串转换为16进制的UNICODE编码
  * </p>
  *
  * @version 1.0
  * @param setStr
  *            需要转换编码的字符串
  * @return 转换后的unicode编码字符串
  * @throws StringUtilException
  *             转换过程中出现错误的话抛出次异常
  *
  *
  */
 public static String getUnicode(String setStr) throws StringUtilException {
  StringBuffer szRet = new StringBuffer("");
  String szRetTmp = null;
  if (!isNullOrEmpty(setStr)) {
   try {
    byte[] bb = setStr.getBytes("UTF16");
    for (int i = 2; i < bb.length; i++) {
     i++;
     if (bb[i - 1] != 0) {
      szRetTmp = "&#x" + toHEXString(bb[i - 1])
        + toHEXString(bb[i]) + ";";
      // szRetTmp = "//u" + toHEXString(bb[i - 1]) +
// toHEXString(bb[i]);
     } else {
      szRetTmp = new String(bb, i, 1, "GBK");
     }
     szRet.append(szRetTmp);
    }
   } catch (Exception ex) {
    throw new StringUtilException("将字符串转换为16进制的UNICODE时出错!");
   }
  }
  return szRet.toString();
 }

 /**
  * 截取字符串的方法
  *
  * @param str
  * @param length
  * @return
  */
 public static String substring(String str, int length) {
  return substring(str, length, "..", true);
 }

 /**
  * 截取字符串的方法
  *
  * @param str
  * @param length
  * @return
  */
 public static String substring(String str, int length, boolean isEscapeHtml) {
  return substring(str, length, "..", isEscapeHtml);
 }

 /**
  * 截取字符串的方法
  *
  * @param str
  *            要截取的字符串
  * @param length
  *            保留长度
  * @param appendStr
  *            截取字符串后追加的字符串
  * @param isEscapeHtml
  *            true:过滤html标签,false:不过滤掉全部的html标签
  * @return
  */
 public static String substring(String str, int length, String appendStr,
   boolean isEscapeHtml) {
  if (isNullOrEmpty(str)) {
   return "";
  } else {
   // 如果设置了过滤html标签,则先过滤一次,然后再截取
   if (isEscapeHtml) {
    str = escapeHtml(str);
   }
   int lenStr = str.length();

   // 如果设置了截取后追加的字符串,查询该字符串的长度
   int lenAppendStr = 0;
   if (!isNullOrEmpty(appendStr)) {
    lenAppendStr = appendStr.length();
   }

   // 如果字符串长度小于等于要保留的长度,则直接返回该字符串
   if (lenStr <= length) {
    return str;
   } else {
    return str.substring(0, length - lenAppendStr) + appendStr;
   }
  }
 }

 /**
  * 忽略字符串中的 script 代码
  *
  * @param str
  * @return
  */
 public static String escapeScript(String str) {
  String s = "";
  if (str != null) {
   String regEx = "<[^<]*(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)([/t/n/r/f]|[^/t/n/r/f])*</(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)([^>])*>";
   Pattern p = Pattern.compile(regEx);
   Matcher m = p.matcher(str);
   s = m.replaceAll("");
  }
  return s;
 }

 /**
  * 忽略字符串中的全部html标签。
  *
  * @param str
  * @return
  */
 public static String escapeHtml(String str) {
  String s = "";
  if (str != null) {
   String regEx = "<[^>]*>";
   Pattern p = Pattern.compile(regEx);
   Matcher m = p.matcher(str);
   s = m.replaceAll("");
  }
  return s;
 }
 /**
  * 过滤掉空格等html代码
  */
 public static String escape(String str){
//  String[] htmlStrs = { "&quot;", "&lt;", "&gt;", "&nbsp;", "&aacute;",
//  "&agrave;", "&curren;", "&deg;", "&divide;", "&eacute;",
//  "&ecirc;", "&egrave;", "&iacute;", "&igrave;", "&middot;",
//  "&oacute;", "&ograve;", "&plusmn;", "&sect;", "&times;",
//  "&uacute;", "&ugrave;", "&uml;", "&uuml;", "&ndash;",
//  "&mdash;", "&lsquo;", "&rsquo;", "&ldquo;", "&rdquo;",
//  "&permil;", "&hellip;", "&larr;", "&uarr;", "&rarr;", "&darr;",
//  "&isin;", "&prod;", "&sum;", "&radic;", "&prop;", "&infin;",
//  "&ang;", "&and;", "&or;", "&cap;", "&cup;", "&int;",
//  "&there4;", "&asymp;", "&ne;", "&equiv;", "&le;", "&ge;",
//  "&amp;" };
  
  String s = "";
  if (str != null) {
   String regEx="&nbsp;";
   Pattern p = Pattern.compile(regEx);
   Matcher m = p.matcher(str);
   s = m.replaceAll("");
  }
  return s;
 }

 /**
  *
  * <p>
  * 取得字符串中的第一个图片链接
  * </p>
  *
  * @version 1.0
  * @param content
  *            原始字符串,一般为新闻的内容。
  * @return String 返回获取到的信息中第一个图片的链接,如果没有取到则返回null
  *
  *
  */
 public static String getFirstImgLink(String content) {
  String firstImgLink = null;
  String regEx = "//<(i|I)(m|M)(g|G)[^//<|//>]*//>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(content);
  if (m.find()) {
   firstImgLink = getImgSrc(m.group());
  }
  return firstImgLink;
 }

 

 /**
  *
  * <p>
  * 取得字符串中的第一个图片链接,并重设高度宽度。
  * </p>
  *
  * @version 1.0
  * @param content
  *            原始字符串,一般为新闻的内容。
  * @param width
  *            重设的宽度
  * @param height
  *            重设的高度
  * @return String 返回获取到的信息中第一个图片的链接,如果没有取到则返回null
  *
  *
  */
 public static String getFirstImg(String content, int width, int height) {
  String firstImgLink = null;
  String regEx = "//<(i|I)(m|M)(g|G)[^//<|//>]*//>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(content);
  if (m.find()) {
   firstImgLink = resetImgSize(m.group(), width, height);
  }
  return firstImgLink;
 }

 /**
  *
  * <p>
  * 取得 img 标签中src中的内容
  * </p>
  *
  * @version 1.0
  * @param imgTag
  *            img标签的字符串
  * @return String 返回所链接的图片
  *
  *
  */
 private static String getImgSrc(String imgTag) {
  String regEx = "src=[^ |//>]*";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(imgTag);
  m.find();
  String imgSrc = m.group();
  imgSrc = imgSrc.replaceAll("(s|S)(r|R)(c|C)=/"", "");
  imgSrc = imgSrc.replaceAll("/"", "");
  int lenImgSrc = imgSrc.length();
  lenImgSrc--;
  if (imgSrc.charAt(lenImgSrc) == '/') {
   imgSrc = imgSrc.substring(0, lenImgSrc);
  }
  return imgSrc;
 }

 /**
  *
  * <p>
  * 取得字符串中的全部图片链接
  * </p>
  *
  * @version 1.0
  * @param content
  *            原始字符串,一般为新闻的内容。
  * @return String 返回获取到的信息中第一个图片的链接,如果没有取到任何图片链接,则返回一个size为0的ArrayList
  *
  *
  */
 public static ArrayList getAllImgLink(String content) {
  ArrayList allImgLinks = new ArrayList();
  String regEx = "//<(i|I)(m|M)(g|G)[^//<|//>]*//>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(content);
  while (m.find()) {
   allImgLinks.add(getImgSrc(m.group()));
  }
  return allImgLinks;
 }

 /**
  *
  * <p>
  * 取得字符串中的全部img签
  * </p>
  *
  * @version 1.0
  * @param content
  *            原始字符串,一般为新闻的内容。
  * @return String 返回获取到的信息中第一个图片的img标签,如果没有取到任何图片链接,则返回一个size为0的ArrayList
  *
  *
  */
 public static ArrayList getAllImg(String content) {
  ArrayList allImgLinks = new ArrayList();
  String regEx = "//<(i|I)(m|M)(g|G)[^//<|//>].//>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(content);
  while (m.find()) {
   allImgLinks.add(m.group());
  }
  return allImgLinks;
 }

 /**
  *
  * <p>
  * 取得字符串中的全部img签
  * </p>
  *
  * @version 1.0
  * @param content
  *            原始字符串,一般为新闻的内容。
  * @return String 返回获取到的信息中第一个图片的img标签,如果没有取到任何图片链接,则返回一个size为0的ArrayList
  *
  *
  */
 public static ArrayList getAllImg(String content, int width, int height) {
  ArrayList allImgLinks = new ArrayList();
  String regEx = "//<(i|I)(m|M)(g|G)[^//<|//>]*//>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(content);
  while (m.find()) {
   allImgLinks.add(resetImgSize(m.group(), width, height));
  }
  return allImgLinks;
 }

 /**
  *
  * <p>
  * 取得 img 标签中src中的内容
  * </p>
  *
  * @version 1.0
  * @param imgTag
  *            String img标签的字符串
  * @param ext
  *            String 抽取图片支持的文件格式,例:gif|jpg
  * @return String 返回所链接的图片
  *
  *
  */
 private static String getImgSrc(String imgTag, String ext) {
  String regEx = "src=[^ |//>]*";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(imgTag);
  m.find();
  String imgSrc = m.group();
  imgSrc = imgSrc.replaceAll("(s|S)(r|R)(c|C)=/"", "");
  imgSrc = imgSrc.replaceAll("/"", "");
  int lenImgSrc = imgSrc.length();
  lenImgSrc--;
  if (imgSrc.charAt(lenImgSrc) == '/') {
   imgSrc = imgSrc.substring(0, lenImgSrc);
  }

  ext = ext.toLowerCase();
  ext = ext.replaceAll("//|", ")//|(.");
  String regEx2 = "(//." + ext + ")";
  Pattern p2 = Pattern.compile(regEx2);
  Matcher m2 = p2.matcher(imgSrc.toLowerCase());
  if (m2.find()) {
   return imgSrc;
  } else {
   return null;
  }
 }

 /**
  *
  *
  * @version 1.0
  * @param content
  *            原始字符串,一般为新闻的内容。
  * @return String 返回获取到的信息中第一个图片的链接,如果没有取到则返回null
  * @param ext
  *            String 抽取图片支持的文件格式,例:gif|jpg
  *
  *
  */
 public static String getFirstImgLink(String content, String ext) {
  String firstImgLink = null;
  String regEx = "//<(i|I)(m|M)(g|G)[^//<|//>]*//>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(content);
  while (m.find()) {
   firstImgLink = getImgSrc(m.group(), ext);
   if (firstImgLink != null) {
    break;
   }
  }
  return firstImgLink;
 }

 /**
  *
 
  * <p>
  * 取得字符串中的全部图片链接
  * </p>
  *
  * @version 1.0
  * @param content
  *            原始字符串,一般为新闻的内容。
  * @return String 返回获取到的信息中第一个图片的链接,如果没有取到任何图片链接,则返回一个size为0的ArrayList
  * @param ext
  *            String 抽取图片支持的文件格式,例:gif|jpg
  *
  *
  */
 public static ArrayList getAllImgLink(String content, String ext) {
  ArrayList allImgLinks = new ArrayList();
  String regEx = "//<(i|I)(m|M)(g|G)[^//<|//>]*//>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(content);
  while (m.find()) {
   String firstImgLink = getImgSrc(m.group(), ext);
   if (firstImgLink != null) {
    allImgLinks.add(getImgSrc(m.group()));
   }
  }
  return allImgLinks;
 }

 


by:http://hi.baidu.com/29228863/blog/item/0f0af3da6522130248540329.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值