package com.hxzkoa.util;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import org.springframework.util.StringUtils;
/**
* 字符串辅助类,处理常用的字符串操作(处理特殊字符)
*
*/
public class StringUtil {
/**
* 缺省的字符串分割符
*/
public static String DEFAULT_DELIM = "|";
/**
* 此方法将给出的字符串source使用delim划分为单词数组。 注意:分隔字符串中每一个 (ANY) 的字符都作为独立的分割符。
*
* 举个例子:
* "mofit.com.cn"用"com"分割后的结果是三个字符串"fit."、"."和"n",而不是"mofit."和".cn"。
*
* @param source
* 需要进行划分的原字符串
* @param delim
* 单词的分隔字符串
* @return 划分以后的数组,如果source为null的时候返回以source为唯一元素的数组,
* 如果delim为null则使用逗号作为分隔字符串。
*/
public static String[] split(String source, String delim) {
String[] wordLists;
if (source == null) {
wordLists = new String[1];
wordLists[0] = source;
return wordLists;
}
if (delim == null) {
delim = DEFAULT_DELIM;
}
StringTokenizer st = new StringTokenizer(source, delim);
int total = st.countTokens();
wordLists = new String[total];
for (int i = 0; i < total; i++) {
wordLists[i] = st.nextToken();
}
return wordLists;
}
/**
* 检查参数值
*
* @param path
* log文件路径
* @param request
*
* @param specialCharacter_array
* 特殊字符数组
* @param str
* 要检查的参数值
* @return
*/
public static boolean checkSpecialCharacter(String path, HttpServletRequest request,
String[] specialCharacter_array, String paramName, String paramValue) {
for (int i = 0; i < specialCharacter_array.length; i++) {
if (paramValue.indexOf(specialCharacter_array[i]) >= 0) {
// FileUtil.appendString(path,
// LogUtil.getLog(request,paramName,paramValue));
return true;
}
}
return false;
}
/**
* 替换特殊字符
*
* @param specialCharacter_array
* @param str
* @return
*/
public static String replaceSpecialCharacter(String[] specialCharacter_array, String str) {
for (int i = 0; i < specialCharacter_array.length; i++) {
if (str.indexOf(specialCharacter_array[i]) >= 0) {
str = str.replace(specialCharacter_array[i], "");
}
}
return str;
}
/**
* 转义特殊字符
*
* @param specialCharacter_array
* @param str
* @return
*/
public static String escapeSpecialCharacter(String[] specialCharacter_array, String str) {
for (int i = 0; i < specialCharacter_array.length; i++) {
if (str.indexOf(specialCharacter_array[i]) >= 0) {
str = escapeXssEncode(str);
}
}
return str;
}
/**
*
* 转义sql、javascript语句片段,并将容易引起xss攻击的半角字符直接替换成全角字符
*
* @param value
* @return
*/
private static String escapeXssEncode(String value) {
if (StringUtils.isEmpty(value))
return value;
String result = value;
// 对中文参数会有影响
/*
* result = StringEscapeUtils.escapeHtml(value); result =
* StringEscapeUtils.escapeSql(value); result =
* StringEscapeUtils.escapeJavaScript(result);
*/
// 避免客户端使用 encodeURI时造成中文转码异常
/*
* result = result.replace('\'','\'); result = result.replace('/', '/');
*/
// ajax序列换表单时造成错误
// result = result.replace('%', '%');
// 有些系统参数从客户端过来的时候是通过“;”连接
// result = result.replace(';', ';');
// 直接过滤特殊字符,但有时候不能这么做。(比如有富文本编辑器时)
result = result.replace('<', '<');
result = result.replace('>', '>');
result = result.replace('"', '"');
result = result.replace('\'', '‘');// 单引号转码
result = result.replace('(', '(');
result = result.replace(')', ')');
result = result.replace('&', '&');
result = result.replace('+', '+');
result = result.replace('#', '#');
return result;
}
public static String removeNonBmpUnicodes(String s) {
return null == s ? null : s.replaceAll("[^\\u0000-\\uFFFF]", "");
}
public static String replaceBlank(String str) {
String dest = "";
if (str != null) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
/**
* 检查字符串是否为纯数字
*
* @param path
* log文件路径
* @param request
*
* @param specialCharacter_array
* 特殊字符数组
* @param str
* 要检查的参数值
* @return
*/
public static boolean checkIsNumber(String param) {
Pattern pattern = Pattern.compile("[0-9]{1,}");
Matcher matcher = pattern.matcher((CharSequence) param);
boolean result = matcher.matches();
return result;
}
public static void main(String[] args) {
System.out.println("just do \nit!");
System.out.println(replaceBlank("just do \nit!"));
String specialCharacters = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,|script";
String target = "