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, " ");
}
/**
* 如果第一个传入参数为空或者空字符串,则返回第二个参数,否则返回第一个参数
*
* @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>
* 屏蔽传入字符串中的 <script></script>标签内的全部内容
* </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 = { "&", """, "<", ">", " ",
"á", "à", "¤", "°", "÷",
"é", "ê", "è", "í", "ì",
"·", "ó", "ò", "±", "§",
"×", "ú", "ù", "¨", "ü",
"–", "—", "‘", "’", "“",
"”", "‰", "…", "←", "↑",
"→", "↓", "∈", "∏", "∑", "√",
"∝", "∞", "∠", "∧", "∨", "∩",
"∪", "∫", "∴", "≈", "≠", "≡",
"≤", "≥" };
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 = { """, "<", ">", " ", "á",
"à", "¤", "°", "÷", "é",
"ê", "è", "í", "ì", "·",
"ó", "ò", "±", "§", "×",
"ú", "ù", "¨", "ü", "–",
"—", "‘", "’", "“", "”",
"‰", "…", "←", "↑", "→", "↓",
"∈", "∏", "∑", "√", "∝", "∞",
"∠", "∧", "∨", "∩", "∪", "∫",
"∴", "≈", "≠", "≡", "≤", "≥",
"&" };
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 = { """, "<", ">", " ", "á",
// "à", "¤", "°", "÷", "é",
// "ê", "è", "í", "ì", "·",
// "ó", "ò", "±", "§", "×",
// "ú", "ù", "¨", "ü", "–",
// "—", "‘", "’", "“", "”",
// "‰", "…", "←", "↑", "→", "↓",
// "∈", "∏", "∑", "√", "∝", "∞",
// "∠", "∧", "∨", "∩", "∪", "∫",
// "∴", "≈", "≠", "≡", "≤", "≥",
// "&" };
String s = "";
if (str != null) {
String regEx=" ";
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