com.frameworkset.util.SimpleStringUtil Maven / Gradle / Ivy
Show all versions of bboss-util Show documentation
/*****************************************************************************
* *
* This file is part of the tna framework distribution. *
* Documentation and updates may be get from biaoping.yin the author of *
* this framework *
* *
* Sun Public License Notice: *
* *
* The contents of this file are subject to the Sun Public License Version *
* 1.0 (the "License"); you may not use this file except in compliance with *
* the License. A copy of the License is available at http://www.sun.com *
* *
* The Original Code is tag. The Initial Developer of the Original *
* Code is biaoping yin. Portions created by biaoping yin are Copyright *
* (C) 2000. All Rights Reserved. *
* *
* GNU Public License Notice: *
* *
* Alternatively, the contents of this file may be used under the terms of *
* the GNU Lesser General Public License (the "LGPL"), in which case the *
* provisions of LGPL are applicable instead of those above. If you wish to *
* allow use of your version of this file only under the terms of the LGPL *
* and not to allow others to use your version of this file under the SPL, *
* indicate your decision by deleting the provisions above and replace *
* them with the notice and other provisions required by the LGPL. If you *
* do not delete the provisions above, a recipient may use your version of *
* this file under either the SPL or the LGPL. *
* *
* biaoping.yin ([email protected]) *
* Author of Learning Java *
* *
*****************************************************************************/
package com.frameworkset.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.lang.reflect.Array;
import java.net.InetAddress;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TimeZone;
import java.util.TreeSet;
import org.apache.oro.text.regex.MalformedPatternException;
import org.apache.oro.text.regex.MatchResult;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.PatternCompiler;
import org.apache.oro.text.regex.PatternMatcher;
import org.apache.oro.text.regex.PatternMatcherInput;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
import org.apache.oro.text.regex.StringSubstitution;
import org.frameworkset.json.JacksonObjectMapperWrapper;
import org.frameworkset.json.JsonTypeReference;
import org.frameworkset.util.CollectionUtils;
import org.frameworkset.util.DataFormatUtil;
import org.frameworkset.util.ObjectUtils;
import org.frameworkset.util.encoder.Charsets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* To change for your class or interface DAO中VOObject String类型与PO数据类型转换工具类.
*
* @author biaoping.yin
* @version 1.0
*/
public class SimpleStringUtil {
// private static final SimpleDateFormat format = new SimpleDateFormat(
// "yyyy-MM-dd HH:mm:ss");
protected static final Logger logger = LoggerFactory.getLogger(SimpleStringUtil.class);
// 逗号常量
public static final String COMMA = ",";
// 空串常量
public static final String BLANK = "";
private static JacksonObjectMapperWrapper objectMapper = new JacksonObjectMapperWrapper();
/**
* A constant passed to the {@link #split split()}methods indicating that
* all occurrences of a pattern should be used to split a string.
*/
public static final int SPLIT_ALL = 0;
/**
* 以下的变量:dontNeedEncoding,dfltEncName,caseDiff 是从jdk 1.4 java.net.URLEncoder
* 下移植过来
*/
private static BitSet dontNeedEncoding;
private static String dfltEncName = null;
static final int caseDiff = ('a' - 'A');
static {
/*
* The list of characters that are not encoded has been determined as
* follows:
*
* RFC 2396 states: ----- Data characters that are allowed in a URI but
* do not have a reserved purpose are called unreserved. These include
* upper and lower case letters, decimal digits, and a limited set of
* punctuation marks and symbols.
*
* unreserved = alphanum | mark
*
* mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
*
* Unreserved characters can be escaped without changing the semantics
* of the URI, but this should not be done unless the URI is being used
* in a context that does not allow the unescaped character to appear.
* -----
*
* It appears that both Netscape and Internet Explorer escape all
* special characters from this list with the exception of "-", "_",
* ".", "*". While it is not clear why they are escaping the other
* characters, perhaps it is safest to assume that there might be
* contexts in which the others are unsafe if not escaped. Therefore, we
* will use the same list. It is also noteworthy that this is consistent
* with O'Reilly's "HTML: The Definitive Guide" (page 164).
*
* As a last note, Intenet Explorer does not encode the "@" character
* which is clearly not unreserved according to the RFC. We are being
* consistent with the RFC in this matter, as is Netscape.
*/
dontNeedEncoding = new BitSet(256);
int i;
for (i = 'a'; i <= 'z'; i++) {
dontNeedEncoding.set(i);
}
for (i = 'A'; i <= 'Z'; i++) {
dontNeedEncoding.set(i);
}
for (i = '0'; i <= '9'; i++) {
dontNeedEncoding.set(i);
}
dontNeedEncoding.set(' '); /*
* encoding a space to a + is done in the
* encode() method
*/
dontNeedEncoding.set('-');
dontNeedEncoding.set('_');
dontNeedEncoding.set('.');
dontNeedEncoding.set('*');
dfltEncName = System.getProperty("file.encoding");
}
private static String ip;
static
{
try {
InetAddress addr = InetAddress.getLocalHost();
String ip_=addr.getHostAddress();//获得本机IP
String address=addr.getHostName();//获得本机名称
ip = ip_ + "-" + address;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
ip = "";
}
}
/**
* 获取服务器IP和名称
* @return
*/
public static String getHostIP()
{
return ip;
}
/**
* 将一个字符串根据逗号分拆
*/
public static String[] split(String s) {
return split(s, COMMA);
}
/**
* Parse the given {@code timeZoneString} value into a {@link TimeZone}.
* @param timeZoneString the time zone {@code String}, following {@link TimeZone#getTimeZone(String)}
* but throwing {@link IllegalArgumentException} in case of an invalid time zone specification
* @return a corresponding {@link TimeZone} instance
* @throws IllegalArgumentException in case of an invalid time zone specification
*/
public static TimeZone parseTimeZoneString(String timeZoneString) {
TimeZone timeZone = TimeZone.getTimeZone(timeZoneString);
if ("GMT".equals(timeZone.getID()) && !timeZoneString.startsWith("GMT")) {
// We don't want that GMT fallback...
throw new IllegalArgumentException("Invalid time zone specification '" + timeZoneString + "'");
}
return timeZone;
}
/**
* 将字符串根据给定分隔符分拆
*/
public static String[] split(String s, String delimiter) {
return split(s, delimiter, true);
// if (s == null || delimiter == null) {
// return new String[0];
// }
//
// s = s.trim();
//
// if (!s.endsWith(delimiter)) {
// s += delimiter;
// }
//
// if (s.equals(delimiter)) {
// return new String[0];
// }
//
// List nodeValues = new ArrayList();
//
// if (delimiter.equals("\n") || delimiter.equals("\r")) {
// try {
// BufferedReader br = new BufferedReader(new StringReader(s));
//
// String line = null;
//
// while ((line = br.readLine()) != null) {
// nodeValues.add(line);
// }
//
// br.close();
// }
// catch (IOException ioe) {
// ioe.printStackTrace();
// }
// }
// else {
// int offset = 0;
// int pos = s.indexOf(delimiter, offset);
//
// while (pos != -1) {
// nodeValues.add(s.substring(offset, pos));
//
// offset = pos + delimiter.length();
// pos = s.indexOf(delimiter, offset);
// }
// }
//
// return (String[])nodeValues.toArray(new String[0]);
}
public static String getRealPath(String contextPath, String path) {
return getRealPath(contextPath, path,false);
}
public static boolean isHttpUrl(String path)
{
if(path == null)
return false;
return path.startsWith("http://")
|| path.startsWith("https://")
|| path.startsWith("ftp://")
|| path.startsWith("tps://") ;
}
public static String getUUID()
{
return UUID.randomUUID().toString();
}
public static String getRealPath(String contextPath, String path,boolean usebase) {
if(isHttpUrl(path))
return path;
if (contextPath == null || contextPath.equals("") || contextPath.equals("/")) {
// System.out.println("SimpleStringUtil.getRealPath() contextPath:"
// + contextPath);
if(usebase)//如果需要检测上下文路径为空串,那么如果path第一个字符不是/,那么需要补充字符/到第一个位置
{
if(isEmpty(path))
return "/";
else
{
return path.startsWith("/")?path:"/"+path;
}
}
else
{
return path == null?"":path;
}
}
if (path == null || path.equals("")) {
return contextPath;
}
contextPath = contextPath.replace('\\', '/');
path = path.replace('\\', '/');
if (path.startsWith("/") ) {
if (!contextPath.endsWith("/"))
return contextPath + path;
else {
return contextPath.substring(0,contextPath.length() - 1) + path;
}
} else {
if (!contextPath.endsWith("/"))
return contextPath + "/" + path;
else {
return contextPath + path;
}
}
}
public static boolean containKey(String[] values, String key) {
if (values == null || key == null) {
return false;
}
boolean contain = false;
for (int i = 0; i < values.length; i++) {
// System.out.println("values[" + i + "]:" + values[i]);
// System.out.println("key:" + key);
if (values[i].equals(key)) {
contain = true;
break;
}
}
return contain;
}
public static String getNormalPath(String parent,String file)
{
if(parent.endsWith("/") && !file.startsWith("/"))
return parent + file;
else if(!parent.endsWith("/") && file.startsWith("/"))
return parent + file;
else if(!parent.endsWith("/") && !file.startsWith("/"))
return parent + "/"+file;
else //if(parent.endsWith("/") && file.startsWith("/"))
return parent + file.substring(1);
}
public static String getFormatDate(Date date, String formate) {
SimpleDateFormat dateFormat = DataFormatUtil.getSimpleDateFormat(formate);
if (date == null) {
return null;
}
return dateFormat.format(date);
}
public static Date stringToDate(String date) {
if (date == null || date.trim().equals("")) {
return null;
}
SimpleDateFormat format = DataFormatUtil.getSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// date = date.replace('-', '/');
// SimpleDateFormat format = new SimpleDateFormat();
try {
return format.parse(date);
} catch (ParseException e) {
return new Date(date);
}
}
public static Date stringToDate(String date, String format_) {
if (date == null || date.trim().equals("")) {
return null;
}
// date = date.replace('-', '/');
SimpleDateFormat format = DataFormatUtil.getSimpleDateFormat(format_);
try {
return format.parse(date);
} catch (ParseException e) {
return new Date(date);
}
}
/**
* 获取文件名称
*
* @param path
* 文件路经
* @return String
*/
public static String getFileName(String path) {
int index = path.lastIndexOf('/');
String fileName = "";
if (index == -1) {
index = path.lastIndexOf('\\');
}
fileName = path.substring(index + 1);
return fileName;
}
public static String getFileName(String prefix, String extension)
throws UnsupportedEncodingException {
// prefix = MessageUtility.getValidFileName(prefix);
// UTF8 URL encoding only works in IE, not Mozilla
String fileName = URLEncoder.encode(prefix);
// Bug of IE (http://support.microsoft.com/?kbid=816868)
// Cannot be more than 150(I don't know the exact number)
int limit = 150 - extension.length();
if (fileName.length() > limit) {
// because the UTF-8 encoding scheme uses 9 bytes to represent a
// single CJK character
fileName = URLEncoder.encode(prefix.substring(0, Math.min(prefix
.length(), limit / 9)));
}
return fileName + extension;
}
/**
* 将日期数组转换成字符串数组
*
* @param dates
* Date[] 日期数组
* @return String[] 字符串数组
*/
public static String[] dateArrayTOStringArray(Date[] dates) {
if (dates == null) {
return null;
}
SimpleDateFormat format = DataFormatUtil.getSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String[] dates_s = new String[dates.length];
for (int i = 0; i < dates.length; i++) {
dates_s[i] = format.format(dates[i]);
}
return dates_s;
}
/**
* 将字符串数组转换成日期数组
*
* Date[] 字符串数组
* @return String[] 日期数组
*/
public static Date[] stringArrayTODateArray(String[] dates_s,SimpleDateFormat dateformat) {
if (dates_s == null) {
return null;
}
Date[] dates = new Date[dates_s.length];
for (int i = 0; i < dates_s.length; i++) {
if(dateformat != null)
{
try {
dates[i] = dateformat.parse((dates_s[i]));
} catch (ParseException e) {
long dl = Long.parseLong(dates_s[i]);
dates[i] = new Date(dl);
}
}
else
{
try
{
dates[i] = new Date(dates_s[i]);
}
catch (Exception e)
{
long dl = Long.parseLong(dates_s[i]);
dates[i] = new Date(dl);
}
}
}
return dates;
}
/**
* 将字符串数组转换成日期数组
*
* Date[] 字符串数组
* @return String[] 日期数组
*/
public static Date[] longArrayTODateArray(long[] dates_s,SimpleDateFormat dateformat) {
if (dates_s == null) {
return null;
}
Date[] dates = new Date[dates_s.length];
for (int i = 0; i < dates_s.length; i++) {
{
dates[i] = new Date(dates_s[i]);
}
}
return dates;
}
/**
* 将字符串数组转换成日期数组
*
* Date[] 字符串数组
* @return String[] 日期数组
*/
public static java.sql.Date[] stringArrayTOSQLDateArray(String[] dates_s,SimpleDateFormat dateformat) {
if (dates_s == null) {
return null;
}
java.sql.Date[] dates = new java.sql.Date[dates_s.length];
for (int i = 0; i < dates_s.length; i++) {
if(dateformat != null)
{
try {
dates[i] = new java.sql.Date(dateformat.parse((dates_s[i]))
.getTime());
} catch (ParseException e) {
// dates[i] = new java.sql.Date(new java.util.Date(dates_s[i])
// .getTime());
long dl = Long.parseLong(dates_s[i]);
dates[i] = new java.sql.Date(dl);
}
}
else
{
try
{
dates[i] = new java.sql.Date(new java.util.Date(dates_s[i])
.getTime());
}
catch (Exception e)
{
long dl = Long.parseLong(dates_s[i]);
dates[i] = new java.sql.Date(dl);
}
}
}
return dates;
}
/**
* 将字符串数组转换成日期数组
*
* Date[] 字符串数组
* @return String[] 日期数组
*/
public static java.sql.Date[] longArrayTOSQLDateArray(long[] dates_s,SimpleDateFormat dateformat) {
if (dates_s == null) {
return null;
}
java.sql.Date[] dates = new java.sql.Date[dates_s.length];
for (int i = 0; i < dates_s.length; i++) {
{
dates[i] = new java.sql.Date(dates_s[i]);
}
}
return dates;
}
/**
* 将字符串数组转换成日期数组
*
* Date[] 字符串数组
* @return String[] 日期数组
*/
public static java.sql.Timestamp[] stringArrayTOTimestampArray(String[] dates_s,SimpleDateFormat dateformat) {
if (dates_s == null) {
return null;
}
java.sql.Timestamp[] dates = new java.sql.Timestamp[dates_s.length];
for (int i = 0; i < dates_s.length; i++) {
if(dateformat != null)
{
try {
dates[i] = new java.sql.Timestamp(dateformat.parse((dates_s[i]))
.getTime());
} catch (ParseException e) {
long dl = Long.parseLong(dates_s[i]);
dates[i] = new java.sql.Timestamp(dl);
// dates[i] = new java.sql.Timestamp(new java.util.Date(dates_s[i])
// .getTime());
}
}
else
{
try
{
dates[i] = new java.sql.Timestamp(new java.util.Date(dates_s[i])
.getTime());
}
catch (Exception e)
{
long dl = Long.parseLong(dates_s[i]);
dates[i] = new java.sql.Timestamp(dl);
}
}
}
return dates;
}
/**
* 将字符串数组转换成日期数组
*
* Date[] 字符串数组
* @return String[] 日期数组
*/
public static java.sql.Timestamp[] longArrayTOTimestampArray(long[] dates_s,SimpleDateFormat dateformat) {
if (dates_s == null) {
return null;
}
java.sql.Timestamp[] dates = new java.sql.Timestamp[dates_s.length];
for (int i = 0; i < dates_s.length; i++) {
{
dates[i] = new java.sql.Timestamp(dates_s[i]);
}
}
return dates;
}
/**
* Replaces all occurrences of a String within another String.
*
* A {@code null} reference passed to this method is a no-op.
*
*
* StringUtils.replace(null, *, *) = null
* StringUtils.replace("", *, *) = ""
* StringUtils.replace("any", null, *) = "any"
* StringUtils.replace("any", *, null) = "any"
* StringUtils.replace("any", "", *) = "any"
* StringUtils.replace("aba", "a", null) = "aba"
* StringUtils.replace("aba", "a", "") = "b"
* StringUtils.replace("aba", "a", "z") = "zbz"
*
*
* @see #replace(String text, String searchString, String replacement, int max)
* @param text text to search and replace in, may be null
* @param searchString the String to search for, may be null
* @param replacement the String to replace it with, may be null
* @return the text with any replacements processed,
* {@code null} if null String input
*/
public static String replace(String text, String searchString, String replacement) {
return replace(text, searchString, replacement, -1);
}
/**
* Represents a failed index search.
* @since 2.1
*/
public static final int INDEX_NOT_FOUND = -1;
/**
* Replaces a String with another String inside a larger String,
* for the first {@code max} values of the search String.
*
* A {@code null} reference passed to this method is a no-op.
*
*
* StringUtils.replace(null, *, *, *) = null
* StringUtils.replace("", *, *, *) = ""
* StringUtils.replace("any", null, *, *) = "any"
* StringUtils.replace("any", *, null, *) = "any"
* StringUtils.replace("any", "", *, *) = "any"
* StringUtils.replace("any", *, *, 0) = "any"
* StringUtils.replace("abaa", "a", null, -1) = "abaa"
* StringUtils.replace("abaa", "a", "", -1) = "b"
* StringUtils.replace("abaa", "a", "z", 0) = "abaa"
* StringUtils.replace("abaa", "a", "z", 1) = "zbaa"
* StringUtils.replace("abaa", "a", "z", 2) = "zbza"
* StringUtils.replace("abaa", "a", "z", -1) = "zbzz"
*
*
* @param text text to search and replace in, may be null
* @param searchString the String to search for, may be null
* @param replacement the String to replace it with, may be null
* @param max maximum number of values to replace, or {@code -1} if no maximum
* @return the text with any replacements processed,
* {@code null} if null String input
*/
public static String replace(String text, String searchString, String replacement, int max) {
if (isEmpty(text) || isEmpty(searchString) || replacement == null || max == 0) {
return text;
}
int start = 0;
int end = text.indexOf(searchString, start);
if (end == INDEX_NOT_FOUND) {
return text;
}
int replLength = searchString.length();
int increase = replacement.length() - replLength;
increase = increase < 0 ? 0 : increase;
increase *= max < 0 ? 16 : max > 64 ? 64 : max;
StringBuilder buf = new StringBuilder(text.length() + increase);
while (end != INDEX_NOT_FOUND) {
buf.append(text.substring(start, end)).append(replacement);
start = end + replLength;
if (--max == 0) {
break;
}
end = text.indexOf(searchString, start);
}
buf.append(text.substring(start));
return buf.toString();
}
/**
* The empty String {@code ""}.
* @since 2.0
*/
public static final String EMPTY = "";
/**
*
* @param str
* @param searchChars
* @param replaceChars
* @return
*/
public static String replaceChars(String str, String searchChars, String replaceChars) {
if (isEmpty(str) || isEmpty(searchChars)) {
return str;
}
if (replaceChars == null) {
replaceChars = EMPTY;
}
boolean modified = false;
int replaceCharsLength = replaceChars.length();
int strLength = str.length();
StringBuilder buf = new StringBuilder(strLength);
for (int i = 0; i < strLength; i++) {
char ch = str.charAt(i);
int index = searchChars.indexOf(ch);
if (index >= 0) {
modified = true;
if (index < replaceCharsLength) {
buf.append(replaceChars.charAt(index));
}
} else {
buf.append(ch);
}
}
if (modified) {
return buf.toString();
}
return str;
}
/**
* 字符串替换函数
*
* @param val
* String
* @param str1
* String
* @param str2
* String
* @return String
*/
public static String replaceAll(String val, String str1, String str2) {
return replaceAll(val, str1, str2, true);
}
public static String replaceFirst(String val, String str1, String str2) {
return replaceFirst(val, str1, str2, true);
}
public static String replaceFirst(String val, String str1, String str2,
boolean CASE_INSENSITIVE) {
String patternStr = str1;
/**
* 编译正则表达式patternStr,并用该表达式与传入的sql语句进行模式匹配,
* 如果匹配正确,则从匹配对象中提取出以上定义好的6部分,存放到数组中并返回 该数组
*/
PatternCompiler compiler = new Perl5Compiler();
Pattern pattern = null;
try {
if (CASE_INSENSITIVE) {
pattern = compiler.compile(patternStr,
Perl5Compiler.DEFAULT_MASK);
} else {
pattern = compiler.compile(patternStr,
Perl5Compiler.CASE_INSENSITIVE_MASK);
}
PatternMatcher matcher = new Perl5Matcher();
return org.apache.oro.text.regex.Util.substitute(matcher, pattern,
new StringSubstitution(str2), val);
} catch (MalformedPatternException e) {
e.printStackTrace();
return val;
}
}
public static String replaceAll(String val, String str1, String str2,
boolean CASE_INSENSITIVE) {
String patternStr = str1;
/**
* 编译正则表达式patternStr,并用该表达式与传入的sql语句进行模式匹配,
* 如果匹配正确,则从匹配对象中提取出以上定义好的6部分,存放到数组中并返回 该数组
*/
PatternCompiler compiler = new Perl5Compiler();
Pattern pattern = null;
try {
if (CASE_INSENSITIVE) {
pattern = compiler.compile(patternStr,
Perl5Compiler.DEFAULT_MASK);
} else {
pattern = compiler.compile(patternStr,
Perl5Compiler.CASE_INSENSITIVE_MASK);
}
PatternMatcher matcher = new Perl5Matcher();
return org.apache.oro.text.regex.Util.substitute(matcher, pattern,
new StringSubstitution(str2), val,
org.apache.oro.text.regex.Util.SUBSTITUTE_ALL);
} catch (MalformedPatternException e) {
e.printStackTrace();
return val;
}
}
public static String replaceAll(String val, String str1, String str2,
int mask) {
String patternStr = str1;
/**
* 编译正则表达式patternStr,并用该表达式与传入的sql语句进行模式匹配,
* 如果匹配正确,则从匹配对象中提取出以上定义好的6部分,存放到数组中并返回 该数组
*/
PatternCompiler compiler = new Perl5Compiler();
Pattern pattern = null;
try {
pattern = compiler.compile(patternStr,
mask);
PatternMatcher matcher = new Perl5Matcher();
return org.apache.oro.text.regex.Util.substitute(matcher, pattern,
new StringSubstitution(str2), val,
org.apache.oro.text.regex.Util.SUBSTITUTE_ALL);
} catch (MalformedPatternException e) {
e.printStackTrace();
return val;
}
}
/**
* 分割字符串为数组函数
*
* @param val
* String
* @param token
* String
* @param CASE_INSENSITIVE
* boolean
* @return String[]
*/
public static String[] split(String val, String token,
boolean CASE_INSENSITIVE) {
String patternStr = token;
/**
* 编译正则表达式patternStr,并用该表达式与传入的sql语句进行模式匹配,
* 如果匹配正确,则从匹配对象中提取出以上定义好的6部分,存放到数组中并返回 该数组
*/
PatternCompiler compiler = new Perl5Compiler();
Pattern pattern = null;
try {
if (CASE_INSENSITIVE) {
pattern = compiler.compile(patternStr,
Perl5Compiler.DEFAULT_MASK);
} else {
pattern = compiler.compile(patternStr,
Perl5Compiler.CASE_INSENSITIVE_MASK);
}
PatternMatcher matcher = new Perl5Matcher();
List list = new ArrayList();
split(list, matcher, pattern, val, SPLIT_ALL);
String[] rets = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
rets[i] = (String) list.get(i);
}
return rets;
} catch (MalformedPatternException e) {
e.printStackTrace();
return new String[] { val };
}
}
/**
* 分割字符串为数组函数
*
* @param val
* String
* @param token
* String
* boolean
* @return String[]
*/
public static String[] split(String val, String token,
int mask) {
String patternStr = token;
/**
* 编译正则表达式patternStr,并用该表达式与传入的sql语句进行模式匹配,
* 如果匹配正确,则从匹配对象中提取出以上定义好的6部分,存放到数组中并返回 该数组
*/
PatternCompiler compiler = new Perl5Compiler();
Pattern pattern = null;
try {
pattern = compiler.compile(patternStr,
mask);
PatternMatcher matcher = new Perl5Matcher();
List list = new ArrayList();
split(list, matcher, pattern, val, SPLIT_ALL);
String[] rets = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
rets[i] = (String) list.get(i);
}
return rets;
} catch (MalformedPatternException e) {
e.printStackTrace();
return new String[] { val };
}
}
private static void split(Collection results, PatternMatcher matcher,
Pattern pattern, String input, int limit) {
int beginOffset;
MatchResult currentResult;
PatternMatcherInput pinput;
pinput = new PatternMatcherInput(input);
beginOffset = 0;
while (--limit != 0 && matcher.contains(pinput, pattern)) {
currentResult = matcher.getMatch();
results.add(input.substring(beginOffset, currentResult
.beginOffset(0)));
beginOffset = currentResult.endOffset(0);
}
results.add(input.substring(beginOffset, input.length()));
}
public static String replaceNull(String resource) {
return resource == null ? "" : resource;
}
public static void main(String args[]) {
// String str = "中文,'bb,cc,'dd";
// try {
// str = new String(str.getBytes(), "utf-8");
// } catch (UnsupportedEncodingException ex) {
// }
// System.out.println(str.getBytes()[0]);
// System.out.println(str.getBytes()[1]);
// System.out.println(str.getBytes()[2]);
// System.out.println(str.getBytes()[3]);
//
// System.out.println("?".getBytes()[0]);
int maxlength = 16;
String replace ="...";
String outStr = "2010年02月04日12时许,何金瑶(女、1987年06月18日生、身份证:430981198706184686、湖南省沅江市沅江市南大膳镇康宁村十二村民组24号)报警:其经营的益阳市电信对面的晴天服装店被盗了。接警后我所民警立即赶至现场了解系,今日中午12时许何金瑶与母亲黄志元在店内做生意,有两男子进入店内,其中一男子以搬店内的试衣镜出去吸引注意力。另一男子就进行盗窃,盗取了其店内收银台抽屉内700元人民币";
System.out.println(SimpleStringUtil.getHandleString(maxlength,replace,false,false,outStr));
outStr = "2010年02月07日11时许,周灵颖报警:在2路公交车上被扒窃,并抓获一名嫌疑人。民警出警后,经调查,周灵颖于当日10时40分许坐2路车到桥南,途中被二名男子扒窃现金3100元。一名被当场抓获,另一名已逃走。 ";
System.out.println(SimpleStringUtil.getHandleString(maxlength,replace,false,false,outStr));
}
/**
* Translates a string into application/x-www-form-urlencoded
* format using a specific encoding scheme. This method uses the supplied
* encoding scheme to obtain the bytes for unsafe characters.
*
* Note: The
* World Wide Web Consortium Recommendation states that
* UTF-8 should be used. Not doing so may introduce
* incompatibilites.
*
* @param s
* String
to be translated.
* @param enc
* The name of a supported character encoding
* .
* @return the translated String
.
* @exception UnsupportedEncodingException
* If the named encoding is not supported
* @see URLDecoder#decode(java.lang.String, java.lang.String)
* @since 1.4
*/
public static String encode(String s, String enc) {
if (enc == null || enc.trim().equals("")) {
enc = dfltEncName;
}
boolean needToChange = false;
boolean wroteUnencodedChar = false;
int maxBytesPerChar = 10; // rather arbitrary limit, but safe for now
StringBuffer out = new StringBuffer(s.length());
ByteArrayOutputStream buf = new ByteArrayOutputStream(maxBytesPerChar);
OutputStreamWriter writer = null;
try {
writer = new OutputStreamWriter(buf, enc);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for (int i = 0; i < s.length(); i++) {
int c = (int) s.charAt(i);
// System.out.println("Examining character: " + c);
if (dontNeedEncoding.get(c)) {
if (c == ' ') {
c = '+';
needToChange = true;
}
// System.out.println("Storing: " + c);
out.append((char) c);
wroteUnencodedChar = true;
} else {
// convert to external encoding before hex conversion
try {
if (wroteUnencodedChar) { // Fix for 4407610
writer = new OutputStreamWriter(buf, enc);
wroteUnencodedChar = false;
}
writer.write(c);
/*
* If this character represents the start of a Unicode
* surrogate pair, then pass in two characters. It's not
* clear what should be done if a bytes reserved in the
* surrogate pairs range occurs outside of a legal surrogate
* pair. For now, just treat it as if it were any other
* character.
*/
if (c >= 0xD800 && c <= 0xDBFF) {
/*
* System.out.println(Integer.toHexString(c) + " is high
* surrogate");
*/
if ((i + 1) < s.length()) {
int d = (int) s.charAt(i + 1);
/*
* System.out.println("\tExamining " +
* Integer.toHexString(d));
*/
if (d >= 0xDC00 && d <= 0xDFFF) {
/*
* System.out.println("\t" +
* Integer.toHexString(d) + " is low
* surrogate");
*/
writer.write(d);
i++;
}
}
}
writer.flush();
} catch (IOException e) {
buf.reset();
continue;
}
byte[] ba = buf.toByteArray();
for (int j = 0; j < ba.length; j++) {
out.append('%');
char ch = Character.forDigit((ba[j] >> 4) & 0xF, 16);
// converting to use uppercase letter as part of
// the hex value if ch is a letter.
if (Character.isLetter(ch)) {
ch -= caseDiff;
}
out.append(ch);
ch = Character.forDigit(ba[j] & 0xF, 16);
if (Character.isLetter(ch)) {
ch -= caseDiff;
}
out.append(ch);
}
buf.reset();
needToChange = true;
}
}
return (needToChange ? out.toString() : s);
}
/**
* Translates a string into application/x-www-form-urlencoded
* format using a specific encoding scheme. This method uses the supplied
* encoding scheme to obtain the bytes for unsafe characters.
*
* Note: The
* World Wide Web Consortium Recommendation states that
* UTF-8 should be used. Not doing so may introduce
* incompatibilites.
*
* @param s
* String
to be translated.
* The name of a supported character encoding
* .
* @return the translated String
.
* @exception UnsupportedEncodingException
* If the named encoding is not supported
* @see URLDecoder#decode(java.lang.String, java.lang.String)
* @since 1.4
*/
public static String encode(String s) {
return encode(s, dfltEncName);
}
public static String toUTF(String inpara) {
char temchr;
int ascchr;
int i;
String rtstr = new String("");
if (inpara == null) {
inpara = "";
}
for (i = 0; i < inpara.length(); i++) {
temchr = inpara.charAt(i);
ascchr = temchr + 0;
// System.out.println(ascchr);
// System.out.println(Integer.toBinaryString(ascchr));
rtstr = rtstr + "" + Integer.toHexString(ascchr) + ";";
}
return rtstr;
}
public static String toGB2312(String inpara) {
// System.out.println("原来的字符串为:" + inpara);
if (inpara == null) {
inpara = "";
}
try {
char[] temp = inpara.toCharArray();
byte[] b = new byte[temp.length];
// System.out.println("分成char[]后字符串的为:" + temp);
// System.out.println("传递字符串的长度为:" + temp.length);
int tempint;
for (int i = 0; i < temp.length; i++) {
b[i] = (byte) temp[i];
tempint = (int) b[i];
// System.out.println("第" + i + "个字符的编码为:" + tempint +
// "\t二进制码为:" +
// Integer.toBinaryString(tempint));
}
String deststring = new String(b, "gb2312");
// System.out.println(deststring);
return deststring;
} catch (java.io.UnsupportedEncodingException e) {
return "不支持的字符编码";
}
}
public List splitString(String src, int size) {
if (src == null)
return null;
List segs = new ArrayList();
StringBuffer seg = new StringBuffer();
while (src.length() > size) {
}
if (src.length() <= size) {
segs.add(src);
return segs;
}
// int length = msg.length();
// int splitNum = (int) (length / step) + 1;
// boolean flag = true;
// if (splitNum > 10) {
// splitNum = 10;
// flag = false;
// }
// int len = 0;
// for (int i = 0; i < splitNum; i++) {
// if (i == 0) {
// String spMsg = msg.substring(0, step) +
// getFirstEnd(splitNum);
// v.addElement(spMsg);
// spMsg = null;
// len = step;
// continue;
// }
// if (i == splitNum - 1) {
// String spMsg = null;
// if (flag == false)
// spMsg = getSecondFirst(i, splitNum) +
// msg.substring(len, len + step);
// v.addElement(spMsg);
// spMsg = null;
// continue;
// }
// String spMsg = null;
// spMsg = getSecondFirst(i, splitNum) +
// msg.substring(len, len + step) +
// getSecondEnd(i, splitNum);
// v.addElement(spMsg);
// spMsg = null;
// }
return null;
}
public String splitString(String src, int offset, int size) {
if (src == null || src.equals("")) {
return "";
}
if (offset < src.length()) {
return src.substring(offset, size);
} else {
int newoffset = src.length() % size;
}
return (String) splitString(src, size).get(offset);
}
public static String replaceNull(String value, String nullReplace) {
return value == null ? nullReplace : value;
}
public static boolean getBoolean(String value, boolean nullReplace) {
boolean ret = false;
if (value == null)
ret = nullReplace;
else if (value.trim().equalsIgnoreCase("true"))
ret = true;
else
ret = false;
return ret;
}
public static int getInt(String value, int defaultValue) {
try {
return Integer.parseInt(value);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 判断链接是否是javascript函数
*
* @param nodeLink
* @return
*/
public static boolean isJavascript(String nodeLink) {
return nodeLink != null
&& nodeLink.toLowerCase().startsWith("javascript:");
}
/**
* 将html中标记语言字符转换为转义符
*
* @param text
* @return
*/
public static String HTMLEncode(String text) {
if(SimpleStringUtil.isEmpty(text ))
return text;
text = SimpleStringUtil.replaceAll(text, "&", "&");
text = SimpleStringUtil.replaceAll(text, "\"", """);
text = SimpleStringUtil.replaceAll(text, "<", "<");
text = SimpleStringUtil.replaceAll(text, ">", ">");
text = SimpleStringUtil.replaceAll(text, "'", "");
text = SimpleStringUtil.replaceAll(text, "\\ ", " ");
text = SimpleStringUtil.replaceAll(text, "\n", "
");
text = SimpleStringUtil.replaceAll(text, "\t", " ");
return text;
}
/**
* 将html中标记语言字符转换为转义符
*
* @param text
* @return
*/
public static String HTMLNoBREncode(String text) {
if(SimpleStringUtil.isEmpty(text ))
return text;
text = SimpleStringUtil.replaceAll(text, "&", "&");
text = SimpleStringUtil.replaceAll(text, "\"", """);
text = SimpleStringUtil.replaceAll(text, "<", "<");
text = SimpleStringUtil.replaceAll(text, ">", ">");
text = SimpleStringUtil.replaceAll(text, "'", "");
text = SimpleStringUtil.replaceAll(text, "\\ ", " ");
// text = SimpleStringUtil.replaceAll(text, "\n", "
");
// text = SimpleStringUtil.replaceAll(text, "\t", " ");
return text;
}
/**
* 将转义的字符串还原
*
* @param text
* @return
*/
public static String HTMLEncodej(String text) {
if(SimpleStringUtil.isEmpty(text ))
return text;
text = SimpleStringUtil.replaceAll(text, "&", "&");
text = SimpleStringUtil.replaceAll(text, """, "\"");
text = SimpleStringUtil.replaceAll(text, "<", "<");
text = SimpleStringUtil.replaceAll(text, ">", ">");
text = SimpleStringUtil.replaceAll(text, "", "'");
text = SimpleStringUtil.replaceAll(text, " ", "\\ ");
text = SimpleStringUtil.replaceAll(text, "
", "\n");
text = SimpleStringUtil.replaceAll(text, " ", "\t");
return text;
}
/**
* 将转义的字符串还原
*
* @param text
* @return
*/
public static String HTMLNoBREncodej(String text) {
if(SimpleStringUtil.isEmpty(text ))
return text;
text = SimpleStringUtil.replaceAll(text, "&", "&");
text = SimpleStringUtil.replaceAll(text, """, "\"");
text = SimpleStringUtil.replaceAll(text, "<", "<");
text = SimpleStringUtil.replaceAll(text, ">", ">");
text = SimpleStringUtil.replaceAll(text, "", "'");
text = SimpleStringUtil.replaceAll(text, " ", "\\ ");
// text = SimpleStringUtil.replaceAll(text, "
", "\n");
// text = SimpleStringUtil.replaceAll(text, " ", "\t");
return text;
}
public static String getHandleString(int maxlength, String replace,
boolean htmlencode, boolean htmldecode, String outStr) {
if (maxlength > 0 && outStr != null && outStr.length() > maxlength) {
outStr = outStr.substring(0, maxlength);
if (replace != null)
outStr += replace;
}
if (htmlencode) {
return SimpleStringUtil.HTMLNoBREncode(outStr);
} else if (htmldecode) {
return SimpleStringUtil.HTMLNoBREncodej(outStr);
} else {
return outStr;
}
}
/**
* 构建消息日志
*
* @param messages
* @return
*/
public static String buildStringMessage(List messages) {
if (messages == null || messages.size() == 0)
return null;
StringBuffer str = new StringBuffer();
for (int i = 0; i < messages.size(); i++) {
if (i == 0)
str.append(messages.get(i));
else
str.append("\\n").append(messages.get(i));
}
return str.toString();
}
public static boolean hasText(String str) {
return hasText((CharSequence) str);
}
/**
* Check whether the given CharSequence has actual text.
* More specifically, returns true
if the string not null
,
* its length is greater than 0, and it contains at least one non-whitespace character.
*
* StringUtils.hasText(null) = false
* StringUtils.hasText("") = false
* StringUtils.hasText(" ") = false
* StringUtils.hasText("12345") = true
* StringUtils.hasText(" 12345 ") = true
*
* @param str the CharSequence to check (may be null
)
* @return true
if the CharSequence is not null
,
* its length is greater than 0, and it does not contain whitespace only
* @see java.lang.Character#isWhitespace
*/
public static boolean hasText(CharSequence str) {
if (!hasLength(str)) {
return false;
}
int strLen = str.length();
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(str.charAt(i))) {
return true;
}
}
return false;
}
/**
* Check that the given CharSequence is neither null
nor of length 0.
* Note: Will return true
for a CharSequence that purely consists of whitespace.
*
* StringUtils.hasLength(null) = false
* StringUtils.hasLength("") = false
* StringUtils.hasLength(" ") = true
* StringUtils.hasLength("Hello") = true
*
* @param str the CharSequence to check (may be null
)
* @return true
if the CharSequence is not null and has length
* @see #hasText(String)
*/
public static boolean hasLength(CharSequence str) {
return (str != null && str.length() > 0);
}
/**
* Test if the given String starts with the specified prefix,
* ignoring upper/lower case.
* @param str the String to check
* @param prefix the prefix to look for
* @see java.lang.String#startsWith
*/
public static boolean startsWithIgnoreCase(String str, String prefix) {
if (str == null || prefix == null) {
return false;
}
if (str.startsWith(prefix)) {
return true;
}
if (str.length() < prefix.length()) {
return false;
}
String lcStr = str.substring(0, prefix.length()).toLowerCase();
String lcPrefix = prefix.toLowerCase();
return lcStr.equals(lcPrefix);
}
/**
* Compare two paths after normalization of them.
* @param path1 first path for comparison
* @param path2 second path for comparison
* @return whether the two paths are equivalent after normalization
*/
public static boolean pathEquals(String path1, String path2) {
return cleanPath(path1).equals(cleanPath(path2));
}
/**
* Normalize the path by suppressing sequences like "path/.." and
* inner simple dots.
* The result is convenient for path comparison. For other uses,
* notice that Windows separators ("\") are replaced by simple slashes.
* @param path the original path
* @return the normalized path
*/
public static String cleanPath(String path) {
String pathToUse = replace(path, WINDOWS_FOLDER_SEPARATOR, FOLDER_SEPARATOR);
// Strip prefix from path to analyze, to not treat it as part of the
// first path element. This is necessary to correctly parse paths like
// "file:core/../core/io/Resource.class", where the ".." should just
// strip the first "core" directory while keeping the "file:" prefix.
int prefixIndex = pathToUse.indexOf(":");
String prefix = "";
if (prefixIndex != -1) {
prefix = pathToUse.substring(0, prefixIndex + 1);
pathToUse = pathToUse.substring(prefixIndex + 1);
}
String[] pathArray = delimitedListToStringArray(pathToUse, FOLDER_SEPARATOR);
List pathElements = new LinkedList();
int tops = 0;
for (int i = pathArray.length - 1; i >= 0; i--) {
if (CURRENT_PATH.equals(pathArray[i])) {
// Points to current directory - drop it.
}
else if (TOP_PATH.equals(pathArray[i])) {
// Registering top path found.
tops++;
}
else {
if (tops > 0) {
// Merging path element with corresponding to top path.
tops--;
}
else {
// Normal path element found.
pathElements.add(0, pathArray[i]);
}
}
}
// Remaining top paths need to be retained.
for (int i = 0; i < tops; i++) {
pathElements.add(0, TOP_PATH);
}
return prefix + collectionToDelimitedString(pathElements, FOLDER_SEPARATOR);
}
/**
* Take a String which is a delimited list and convert it to a String array.
*
A single delimiter can consists of more than one character: It will still
* be considered as single delimiter string, rather than as bunch of potential
* delimiter characters - in contrast to tokenizeToStringArray
.
* @param str the input String
* @param delimiter the delimiter between elements (this is a single delimiter,
* rather than a bunch individual delimiter characters)
* @return an array of the tokens in the list
* @see #tokenizeToStringArray
*/
public static String[] delimitedListToStringArray(String str, String delimiter) {
return delimitedListToStringArray(str, delimiter, null);
}
/**
* Take a String which is a delimited list and convert it to a String array.
*
A single delimiter can consists of more than one character: It will still
* be considered as single delimiter string, rather than as bunch of potential
* delimiter characters - in contrast to tokenizeToStringArray
.
* @param str the input String
* @param delimiter the delimiter between elements (this is a single delimiter,
* rather than a bunch individual delimiter characters)
* @param charsToDelete a set of characters to delete. Useful for deleting unwanted
* line breaks: e.g. "\r\n\f" will delete all new lines and line feeds in a String.
* @return an array of the tokens in the list
* @see #tokenizeToStringArray
*/
public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) {
if (str == null) {
return new String[0];
}
if (delimiter == null) {
return new String[] {str};
}
List result = new ArrayList();
if ("".equals(delimiter)) {
for (int i = 0; i < str.length(); i++) {
result.add(deleteAny(str.substring(i, i + 1), charsToDelete));
}
}
else {
int pos = 0;
int delPos = 0;
while ((delPos = str.indexOf(delimiter, pos)) != -1) {
result.add(deleteAny(str.substring(pos, delPos), charsToDelete));
pos = delPos + delimiter.length();
}
if (str.length() > 0 && pos <= str.length()) {
// Add rest of String, but not in case of empty input.
result.add(deleteAny(str.substring(pos), charsToDelete));
}
}
return toStringArray(result);
}
/**
* Copy the given Collection into a String array.
* The Collection must contain String elements only.
* @param collection the Collection to copy
* @return the String array (null
if the passed-in
* Collection was null
)
*/
public static String[] toStringArray(Collection collection) {
if (collection == null) {
return null;
}
return (String[]) collection.toArray(new String[collection.size()]);
}
/**
* Copy the given Collection into a String array.
* The Collection must contain String elements only.
* @param collection the Collection to copy
* @return the String array (null
if the passed-in
* Collection was null
)
*/
public static Integer[] toIntArray(Collection collection) {
if (collection == null) {
return null;
}
return (Integer[]) collection.toArray(new Integer[collection.size()]);
}
/**
* Copy the given Enumeration into a String array.
* The Enumeration must contain String elements only.
* @param enumeration the Enumeration to copy
* @return the String array (null
if the passed-in
* Enumeration was null
)
*/
public static String[] toStringArray(Enumeration enumeration) {
if (enumeration == null) {
return null;
}
List list = Collections.list(enumeration);
return (String[]) list.toArray(new String[list.size()]);
}
/**
* Trim the elements of the given String array,
* calling String.trim()
on each of them.
* @param array the original String array
* @return the resulting array (of the same size) with trimmed elements
*/
public static String[] trimArrayElements(String[] array) {
if (ObjectUtils.isEmpty(array)) {
return new String[0];
}
String[] result = new String[array.length];
for (int i = 0; i < array.length; i++) {
String element = array[i];
result[i] = (element != null ? element.trim() : null);
}
return result;
}
/**
* Remove duplicate Strings from the given array.
* Also sorts the array, as it uses a TreeSet.
* @param array the String array
* @return an array without duplicates, in natural sort order
*/
public static String[] removeDuplicateStrings(String[] array) {
if (ObjectUtils.isEmpty(array)) {
return array;
}
Set set = new TreeSet();
for (int i = 0; i < array.length; i++) {
set.add(array[i]);
}
return toStringArray(set);
}
/**
* Delete any character in a given String.
* @param inString the original String
* @param charsToDelete a set of characters to delete.
* E.g. "az\n" will delete 'a's, 'z's and new lines.
* @return the resulting String
*/
public static String deleteAny(String inString, String charsToDelete) {
if (!hasLength(inString) || !hasLength(charsToDelete)) {
return inString;
}
StringBuffer out = new StringBuffer();
for (int i = 0; i < inString.length(); i++) {
char c = inString.charAt(i);
if (charsToDelete.indexOf(c) == -1) {
out.append(c);
}
}
return out.toString();
}
/**
* Convenience method to return a Collection as a delimited (e.g. CSV)
* String. E.g. useful for toString()
implementations.
* @param coll the Collection to display
* @param delim the delimiter to use (probably a ",")
* @param prefix the String to start each element with
* @param suffix the String to end each element with
* @return the delimited String
*/
public static String collectionToDelimitedString(Collection coll, String delim, String prefix, String suffix) {
if (CollectionUtils.isEmpty(coll)) {
return "";
}
StringBuffer sb = new StringBuffer();
Iterator it = coll.iterator();
while (it.hasNext()) {
sb.append(prefix).append(it.next()).append(suffix);
if (it.hasNext()) {
sb.append(delim);
}
}
return sb.toString();
}
/**
* Convenience method to return a Collection as a delimited (e.g. CSV)
* String. E.g. useful for toString()
implementations.
* @param coll the Collection to display
* @param delim the delimiter to use (probably a ",")
* @return the delimited String
*/
public static String collectionToDelimitedString(Collection coll, String delim) {
return collectionToDelimitedString(coll, delim, "", "");
}
/**
* Convenience method to return a Collection as a CSV String.
* E.g. useful for toString()
implementations.
* @param coll the Collection to display
* @return the delimited String
*/
public static String collectionToCommaDelimitedString(Collection coll) {
return collectionToDelimitedString(coll, ",");
}
/**
* Tokenize the given String into a String array via a StringTokenizer.
* Trims tokens and omits empty tokens.
* The given delimiters string is supposed to consist of any number of
* delimiter characters. Each of those characters can be used to separate
* tokens. A delimiter is always a single character; for multi-character
* delimiters, consider using delimitedListToStringArray
* @param str the String to tokenize
* @param delimiters the delimiter characters, assembled as String
* (each of those characters is individually considered as delimiter).
* @return an array of the tokens
* @see java.util.StringTokenizer
* @see java.lang.String#trim()
* @see #delimitedListToStringArray
*/
public static String[] tokenizeToStringArray(String str, String delimiters) {
return tokenizeToStringArray(str, delimiters, true, true);
}
/**
* Tokenize the given String into a String array via a StringTokenizer.
*
The given delimiters string is supposed to consist of any number of
* delimiter characters. Each of those characters can be used to separate
* tokens. A delimiter is always a single character; for multi-character
* delimiters, consider using delimitedListToStringArray
* @param str the String to tokenize
* @param delimiters the delimiter characters, assembled as String
* (each of those characters is individually considered as delimiter)
* @param trimTokens trim the tokens via String's trim
* @param ignoreEmptyTokens omit empty tokens from the result array
* (only applies to tokens that are empty after trimming; StringTokenizer
* will not consider subsequent delimiters as token in the first place).
* @return an array of the tokens (null
if the input String
* was null
)
* @see java.util.StringTokenizer
* @see java.lang.String#trim()
* @see #delimitedListToStringArray
*/
public static String[] tokenizeToStringArray(
String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens) {
if (str == null) {
return null;
}
StringTokenizer st = new StringTokenizer(str, delimiters);
List tokens = new ArrayList();
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (trimTokens) {
token = token.trim();
}
if (!ignoreEmptyTokens || token.length() > 0) {
tokens.add(token);
}
}
return toStringArray(tokens);
}
private static final String FOLDER_SEPARATOR = "/";
private static final String WINDOWS_FOLDER_SEPARATOR = "\\";
private static final String TOP_PATH = "..";
private static final String CURRENT_PATH = ".";
private static final char EXTENSION_SEPARATOR = '.';
/**
* Apply the given relative path to the given path,
* assuming standard Java folder separation (i.e. "/" separators);
* @param path the path to start from (usually a full file path)
* @param relativePath the relative path to apply
* (relative to the full file path above)
* @return the full file path that results from applying the relative path
*/
public static String applyRelativePath(String path, String relativePath) {
int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
if (separatorIndex != -1) {
String newPath = path.substring(0, separatorIndex);
if (!relativePath.startsWith(FOLDER_SEPARATOR)) {
newPath += FOLDER_SEPARATOR;
}
return newPath + relativePath;
}
else {
return relativePath;
}
}
/**
* Extract the filename from the given path,
* e.g. "mypath/myfile.txt" -> "myfile.txt".
* @param path the file path (may be null
)
* @return the extracted filename, or null
if none
*/
public static String getFilename(String path) {
if (path == null) {
return null;
}
int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
return (separatorIndex != -1 ? path.substring(separatorIndex + 1) : path);
}
/**
* Convenience method to return a String array as a CSV String.
* E.g. useful for toString()
implementations.
* @param arr the array to display
* @return the delimited String
*/
public static String arrayToCommaDelimitedString(Object[] arr) {
return arrayToDelimitedString(arr, ",");
}
/**
* Convenience method to return a String array as a delimited (e.g. CSV)
* String. E.g. useful for toString()
implementations.
* @param arr the array to display
* @param delim the delimiter to use (probably a ",")
* @return the delimited String
*/
public static String arrayToDelimitedString(Object[] arr, String delim) {
if (ObjectUtils.isEmpty(arr)) {
return "";
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
if (i > 0) {
sb.append(delim);
}
sb.append(arr[i]);
}
return sb.toString();
}
/**
* Trim trailing whitespace from the given String.
* @param str the String to check
* @return the trimmed String
* @see java.lang.Character#isWhitespace
*/
public static String trimTrailingWhitespace(String str) {
if (!hasLength(str)) {
return str;
}
StringBuffer buf = new StringBuffer(str);
while (buf.length() > 0 && Character.isWhitespace(buf.charAt(buf.length() - 1))) {
buf.deleteCharAt(buf.length() - 1);
}
return buf.toString();
}
/**
* Trim all occurences of the supplied leading character from the given String.
* @param str the String to check
* @param leadingCharacter the leading character to be trimmed
* @return the trimmed String
*/
public static String trimLeadingCharacter(String str, char leadingCharacter) {
if (!hasLength(str)) {
return str;
}
StringBuffer buf = new StringBuffer(str);
while (buf.length() > 0 && buf.charAt(0) == leadingCharacter) {
buf.deleteCharAt(0);
}
return buf.toString();
}
/**
* Trim all occurences of the supplied trailing character from the given String.
* @param str the String to check
* @param trailingCharacter the trailing character to be trimmed
* @return the trimmed String
*/
public static String trimTrailingCharacter(String str, char trailingCharacter) {
if (!hasLength(str)) {
return str;
}
StringBuffer buf = new StringBuffer(str);
while (buf.length() > 0 && buf.charAt(buf.length() - 1) == trailingCharacter) {
buf.deleteCharAt(buf.length() - 1);
}
return buf.toString();
}
/**
* Trim leading whitespace from the given String.
* @param str the String to check
* @return the trimmed String
* @see java.lang.Character#isWhitespace
*/
public static String trimLeadingWhitespace(String str) {
if (!hasLength(str)) {
return str;
}
StringBuffer buf = new StringBuffer(str);
while (buf.length() > 0 && Character.isWhitespace(buf.charAt(0))) {
buf.deleteCharAt(0);
}
return buf.toString();
}
/**
* Count the occurrences of the substring in string s.
* @param str string to search in. Return 0 if this is null.
* @param sub string to search for. Return 0 if this is null.
*/
public static int countOccurrencesOf(String str, String sub) {
if (str == null || sub == null || str.length() == 0 || sub.length() == 0) {
return 0;
}
int count = 0, pos = 0, idx = 0;
while ((idx = str.indexOf(sub, pos)) != -1) {
++count;
pos = idx + sub.length();
}
return count;
}
/**
* Strip the filename extension from the given path,
* e.g. "mypath/myfile.txt" -> "mypath/myfile".
* @param path the file path (may be null
)
* @return the path with stripped filename extension,
* or null
if none
*/
public static String stripFilenameExtension(String path) {
if (path == null) {
return null;
}
int sepIndex = path.lastIndexOf(EXTENSION_SEPARATOR);
return (sepIndex != -1 ? path.substring(0, sepIndex) : path);
}
/**
* Convert a CSV list into an array of Strings.
* @param str the input String
* @return an array of Strings, or the empty array in case of empty input
*/
public static String[] commaDelimitedListToStringArray(String str) {
return delimitedListToStringArray(str, ",");
}
/**
* Append the given String to the given String array, returning a new array
* consisting of the input array contents plus the given String.
* @param array the array to append to (can be null
)
* @param str the String to append
* @return the new array (never null
)
*/
public static String[] addStringToArray(String[] array, String str) {
if (ObjectUtils.isEmpty(array)) {
return new String[] {str};
}
String[] newArr = new String[array.length + 1];
System.arraycopy(array, 0, newArr, 0, array.length);
newArr[array.length] = str;
return newArr;
}
/**
* Trim all whitespace from the given String:
* leading, trailing, and inbetween characters.
* @param str the String to check
* @return the trimmed String
* @see java.lang.Character#isWhitespace
*/
public static String trimAllWhitespace(String str) {
if (!hasLength(str)) {
return str;
}
StringBuffer buf = new StringBuffer(str);
int index = 0;
while (buf.length() > index) {
if (Character.isWhitespace(buf.charAt(index))) {
buf.deleteCharAt(index);
}
else {
index++;
}
}
return buf.toString();
}
/**
* Parse the given localeString
into a {@link Locale}.
*
This is the inverse operation of {@link Locale#toString Locale's toString}.
* @param localeString the locale string, following Locale's
* toString()
format ("en", "en_UK", etc);
* also accepts spaces as separators, as an alternative to underscores
* @return a corresponding Locale
instance
*/
public static Locale parseLocaleString(String localeString) {
String[] parts = tokenizeToStringArray(localeString, "_ ", false, false);
String language = (parts.length > 0 ? parts[0] : "");
String country = (parts.length > 1 ? parts[1] : "");
String variant = "";
if (parts.length >= 2) {
// There is definitely a variant, and it is everything after the country
// code sans the separator between the country code and the variant.
int endIndexOfCountryCode = localeString.indexOf(country) + country.length();
// Strip off any leading '_' and whitespace, what's left is the variant.
variant = trimLeadingWhitespace(localeString.substring(endIndexOfCountryCode));
if (variant.startsWith("_")) {
variant = trimLeadingCharacter(variant, '_');
}
}
return (language.length() > 0 ? new Locale(language, country, variant) : null);
}
/**
* Determine the RFC 3066 compliant language tag,
* as used for the HTTP "Accept-Language" header.
* @param locale the Locale to transform to a language tag
* @return the RFC 3066 compliant language tag as String
*/
public static String toLanguageTag(Locale locale) {
return locale.getLanguage() + (hasText(locale.getCountry()) ? "-" + locale.getCountry() : "");
}
/**
* Extract the filename extension from the given path,
* e.g. "mypath/myfile.txt" -> "txt".
* @param path the file path (may be null
)
* @return the extracted filename extension, or null
if none
*/
public static String getFilenameExtension(String path) {
if (path == null) {
return null;
}
int sepIndex = path.lastIndexOf(EXTENSION_SEPARATOR);
return (sepIndex != -1 ? path.substring(sepIndex + 1) : null);
}
public static final String AOP_PROPERTIES_PATH = "/aop.properties";
public static InputStream getInputStream(String resourcefile,Class clazz) throws IOException {
InputStream is = null;
is = clazz.getResourceAsStream(resourcefile);
if (is == null) {
throw new FileNotFoundException(resourcefile
+ " cannot be opened because it does not exist");
}
return is;
}
public static Properties getProperties(String resourcefile,Class clazz) throws IOException {
InputStream is = getInputStream(resourcefile,clazz);
try {
Properties props = new Properties();
props.load(is);
return props;
} finally {
is.close();
}
}
public static boolean isEmpty(String value)
{
return value == null || "".equals(value);
}
public static boolean isNotEmpty(String value)
{
return value != null && !"".equals(value);
}
public static boolean isEmpty(Collection cl)
{
return cl == null || cl.size() == 0;
}
public static boolean isNotEmpty(Collection cl)
{
return !isEmpty( cl);
}
public static boolean isEmpty(Object obj)
{
if(obj == null)
return true;
if(obj instanceof String)
{
return isEmpty((String)obj);
}
if(obj instanceof Collection)
{
return isEmpty((Collection)obj);
}
else if(!obj.getClass().isArray())
{
return false;
}
else
{
return Array.getLength(obj) == 0;
}
}
public static boolean isNotEmpty(Object obj)
{
return !isEmpty( obj);
}
public static String formatException(Throwable exception)
{
StringWriter out = new StringWriter();
exception.printStackTrace(new java.io.PrintWriter(out));
String errorMessage = out.toString();
errorMessage = errorMessage.replaceAll("\\n",
"\\\\n");
errorMessage = errorMessage.replaceAll("\\r",
"\\\\r");
return errorMessage;
}
public static String formatBRException(Throwable exception)
{
StringWriter out = new StringWriter();
exception.printStackTrace(new java.io.PrintWriter(out));
String errorMessage = out.toString();
errorMessage = errorMessage.replaceAll("\\n",
"
");
errorMessage = errorMessage.replaceAll("\\r",
"
");
return errorMessage;
}
public static String exceptionToString(Throwable exception)
{
StringWriter out = new StringWriter();
try {
exception.printStackTrace(new java.io.PrintWriter(out));
String errorMessage = out.toString();
return errorMessage;
}
finally {
try {
out.close();
} catch (IOException e) {
}
}
// errorMessage = errorMessage.replaceAll("\\n",
// "\\\\n");
// errorMessage = errorMessage.replaceAll("\\r",
// "\\\\r");
}
// /**
// * 对value采用charset进行URLEncode编码,编码的次数根据encoudtimes指定
// * @param value
// * @param charset
// * @param encoudtimes
// * @return
// */
// public static String urlencode(String value,String charset,int encodecount)
// {
// if(value == null)
// return value;
// else if(encodecount <= 1)
// try {
// value = URLEncoder.encode(value,"UTF-8");
// } catch (UnsupportedEncodingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// else if(encodecount == 2)
// try {
// value = URLEncoder.encode(URLEncoder.encode(value,"UTF-8"),"UTF-8");
// } catch (UnsupportedEncodingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// else if(encodecount == 3)
// try {
// value = URLEncoder.encode(URLEncoder.encode(URLEncoder.encode(value,"UTF-8"),"UTF-8"),"UTF-8");
// } catch (UnsupportedEncodingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// else
// try {
// for(int i = 0; i < encodecount; i ++)
// {
// value = URLEncoder.encode(value,"UTF-8");
// }
// return value;
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// return value;
//
// }
/**
* 对value采用charset进行URLEncode编码,编码的次数根据encoudtimes指定
* @param value
* @param charset
* @param encodecount
* @return
*/
public static String urlencode(String value,String charset,int encodecount)
{
if(value == null)
return value;
else if(encodecount <= 1)
try {
value = URLEncoder.encode(value,charset);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
else if(encodecount == 2)
try {
value = URLEncoder.encode(URLEncoder.encode(value,charset),charset);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
else if(encodecount == 3)
try {
value = URLEncoder.encode(URLEncoder.encode(URLEncoder.encode(value,charset),charset),charset);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
else
try {
for(int i = 0; i < encodecount; i ++)
{
value = URLEncoder.encode(value,charset);
}
return value;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return value;
}
/**
* 对value采用charset进行URLEncode编码,编码的次数为1
* @param value
* @param charset
* @return
*/
public static String urlencode(String value,String charset)
{
return urlencode(value,charset,1);
}
private static Map localesIndexByString;
public static Locale getLocale(String locale)
{
return getAllLocales().get(locale);
}
/**
*
* @return
*/
public static Map getAllLocales()
{
if(localesIndexByString != null)
{
return localesIndexByString;
}
synchronized(SimpleStringUtil.class)
{
if(localesIndexByString != null)
{
return localesIndexByString;
}
Map lm = new HashMap();
{
// if(locale.equals(Locale.SIMPLIFIED_CHINESE))
{
lm.put(String.valueOf(Locale.SIMPLIFIED_CHINESE), Locale.SIMPLIFIED_CHINESE);
}
// else if(locale.equals(Locale.ENGLISH))
{
lm.put(String.valueOf(Locale.ENGLISH), Locale.ENGLISH);
}
// else if(locale.equals(Locale.US))
{
lm.put(String.valueOf(Locale.US), Locale.US);
}
// else if(locale.equals(Locale.JAPANESE))
{
lm.put(String.valueOf(Locale.JAPANESE), Locale.JAPANESE);
}
// else if(locale.equals(Locale.FRENCH))
{
lm.put(String.valueOf(Locale.FRENCH), Locale.FRENCH);
}
// else if(locale.equals(Locale.CANADA_FRENCH))
{
lm.put(String.valueOf(Locale.CANADA_FRENCH), Locale.CANADA_FRENCH);
}
// else if(locale.equals(Locale.CANADA))
{
lm.put(String.valueOf(Locale.CANADA), Locale.CANADA);
}
// else if(locale.equals(Locale.UK))
{
lm.put(String.valueOf(Locale.UK), Locale.UK);
}
// else if(locale.equals(Locale.TAIWAN))
{
lm.put(String.valueOf(Locale.TAIWAN), Locale.TAIWAN);
}
// else if(locale.equals(Locale.PRC))
{
lm.put(String.valueOf(Locale.PRC), Locale.PRC);
}
// else if(locale.equals(Locale.KOREA))
{
lm.put(String.valueOf(Locale.KOREA), Locale.KOREA);
}
// else if(locale.equals(Locale.JAPAN))
{
lm.put(String.valueOf(Locale.JAPAN), Locale.JAPAN);
}
// else if(locale.equals(Locale.ITALY))
{
lm.put(String.valueOf(Locale.ITALY), Locale.ITALY);
}
// else if(locale.equals(Locale.GERMANY))
{
lm.put(String.valueOf(Locale.GERMANY), Locale.GERMANY);
}
// else if(locale.equals(Locale.FRANCE))
{
lm.put(String.valueOf(Locale.FRANCE), Locale.FRANCE);
}
// else if(locale.equals(Locale.TRADITIONAL_CHINESE))
{
lm.put(String.valueOf(Locale.TRADITIONAL_CHINESE), Locale.TRADITIONAL_CHINESE);
}
// else if(locale.equals(Locale.CHINESE))
{
lm.put(String.valueOf(Locale.CHINESE), Locale.CHINESE);
}
// else if(locale.equals(Locale.KOREAN))
{
lm.put(String.valueOf(Locale.KOREAN), Locale.KOREAN);
}
// else if(locale.equals(Locale.ITALIAN))
{
lm.put(String.valueOf(Locale.ITALIAN), Locale.ITALIAN);
}
// else if(locale.equals(Locale.GERMAN))
{
lm.put(String.valueOf(Locale.GERMAN), Locale.GERMAN);
}
lm.put("ROOT", Locale.ROOT);
// else
// {
// log.debug("不正确的语言代码:"+ locale);
// }
}
localesIndexByString = lm;
}
return localesIndexByString;
}
/**
*
* @param locales
* @return
*/
public static Map converLocales(String locales)
{
if(locales == null || locales.trim().equals(""))
return null;
String[] locales_ = locales.split("\\,");
Map lm = new HashMap();
for(String locale:locales_)
{
if(locale.equals(Locale.SIMPLIFIED_CHINESE.toString()))
{
lm.put(locale, Locale.SIMPLIFIED_CHINESE);
}
else if(locale.equals(Locale.ENGLISH.toString()))
{
lm.put(locale, Locale.ENGLISH);
}
else if(locale.equals(Locale.US.toString()))
{
lm.put(locale, Locale.US);
}
else if(locale.equals(Locale.JAPANESE.toString()))
{
lm.put(locale, Locale.JAPANESE);
}
else if(locale.equals(Locale.FRENCH.toString()))
{
lm.put(locale, Locale.FRENCH);
}
else if(locale.equals(Locale.CANADA_FRENCH.toString()))
{
lm.put(locale, Locale.CANADA_FRENCH);
}
else if(locale.equals(Locale.CANADA.toString()))
{
lm.put(locale, Locale.CANADA);
}
else if(locale.equals(Locale.UK.toString()))
{
lm.put(locale, Locale.UK);
}
else if(locale.equals(Locale.TAIWAN.toString()))
{
lm.put(locale, Locale.TAIWAN);
}
else if(locale.equals(Locale.PRC.toString()))
{
lm.put(locale, Locale.PRC);
}
else if(locale.equals(Locale.KOREA.toString()))
{
lm.put(locale, Locale.KOREA);
}
else if(locale.equals(Locale.JAPAN.toString()))
{
lm.put(locale, Locale.JAPAN);
}
else if(locale.equals(Locale.ITALY.toString()))
{
lm.put(locale, Locale.ITALY);
}
else if(locale.equals(Locale.GERMANY.toString()))
{
lm.put(locale, Locale.GERMANY);
}
else if(locale.equals(Locale.FRANCE.toString()))
{
lm.put(locale, Locale.FRANCE);
}
else if(locale.equals(Locale.TRADITIONAL_CHINESE.toString()))
{
lm.put(locale, Locale.TRADITIONAL_CHINESE);
}
else if(locale.equals(Locale.CHINESE.toString()))
{
lm.put(locale, Locale.CHINESE);
}
else if(locale.equals(Locale.KOREAN.toString()))
{
lm.put(locale, Locale.KOREAN);
}
else if(locale.equals(Locale.ITALIAN.toString()))
{
lm.put(locale, Locale.ITALIAN);
}
else if(locale.equals(Locale.GERMAN.toString()))
{
lm.put(locale, Locale.GERMAN);
}
else
{
logger.debug("不正确的语言代码:"+ locale + ",build new Locale for " + locale + "." );
lm.put(locale, new Locale(locale));
}
}
return lm;
}
public static T json2Object(String jsonString,Class toclass,boolean ALLOW_SINGLE_QUOTES) {
// TODO Auto-generated method stub
// String jsonString = "[{'from_date':'2001-09-21','to_date':'2011-04-02','company':'人寿保险','department':'xxx','position':'主管' },{'from_date':'0002-12-01','to_date':'2011-04-02', 'company':'人寿保险','department':'xxx','position':'主管' }]";
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(Feature.ALLOW_SINGLE_QUOTES, ALLOW_SINGLE_QUOTES);
// try {
// T value = mapper.readValue(jsonString, toclass);
// return value;
//
//
// } catch (Exception e) {
// throw new IllegalArgumentException(jsonString,e);
// }
return objectMapper.json2Object(jsonString,toclass,ALLOW_SINGLE_QUOTES);
}
public static T json2ObjectWithType(String jsonString,JsonTypeReference ref) {
return json2ObjectWithType(jsonString,ref,true);
}
public static T json2ObjectWithType(String jsonString,JsonTypeReference ref,boolean ALLOW_SINGLE_QUOTES) {
// TODO Auto-generated method stub
// String jsonString = "[{'from_date':'2001-09-21','to_date':'2011-04-02','company':'人寿保险','department':'xxx','position':'主管' },{'from_date':'0002-12-01','to_date':'2011-04-02', 'company':'人寿保险','department':'xxx','position':'主管' }]";
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(Feature.ALLOW_SINGLE_QUOTES, ALLOW_SINGLE_QUOTES);
// try {
// T value = mapper.readValue(jsonString, ref);
// return value;
//
//
// } catch (Exception e) {
// throw new IllegalArgumentException(jsonString,e);
// }
return objectMapper.json2ObjectWithType(jsonString, ref, ALLOW_SINGLE_QUOTES);
}
public static T json2Object(String jsonString,Class toclass) {
// TODO Auto-generated method stub
return objectMapper.json2Object(jsonString,toclass,true);
}
public static T json2Object(InputStream jsonString,Class toclass) {
// TODO Auto-generated method stub
return objectMapper.json2Object(jsonString,toclass,true);
}
public static String object2json(Object object,boolean ALLOW_SINGLE_QUOTES) {
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(Feature.ALLOW_SINGLE_QUOTES, ALLOW_SINGLE_QUOTES);
// try {
// String value = mapper.writeValueAsString(object);
//
// return value;
//
//
// } catch (Exception e) {
// throw new IllegalArgumentException("错误的json序列化操作",e);
// }
return objectMapper.object2json( object, ALLOW_SINGLE_QUOTES);
}
public static String object2json(Object object) {
return object2json(object,true) ;
}
public static void object2json(Object object,Writer writer,boolean ALLOW_SINGLE_QUOTES) {
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(Feature.ALLOW_SINGLE_QUOTES, ALLOW_SINGLE_QUOTES);
// try {
// mapper.writeValue(writer,object);
//
//
//
//
// } catch (Exception e) {
// throw new IllegalArgumentException("错误的json序列化操作",e);
// }
objectMapper.object2json(object,writer,ALLOW_SINGLE_QUOTES);
}
public static void object2json(Object object,Writer writer) {
objectMapper.object2json(object,writer,true) ;
}
public static void object2json(Object object,OutputStream writer,boolean ALLOW_SINGLE_QUOTES) {
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(Feature.ALLOW_SINGLE_QUOTES, ALLOW_SINGLE_QUOTES);
// try {
// mapper.writeValue(writer,object);
//
//
//
//
// } catch (Exception e) {
// throw new IllegalArgumentException("错误的json序列化操作",e);
// }
objectMapper.object2json(object,writer,ALLOW_SINGLE_QUOTES);
}
public static void object2json(Object object,OutputStream writer) {
objectMapper.object2json(object,writer,true) ;
}
public static void object2json(Object object,File writer,boolean ALLOW_SINGLE_QUOTES) {
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(Feature.ALLOW_SINGLE_QUOTES, ALLOW_SINGLE_QUOTES);
// try {
// mapper.writeValue(writer,object);
//
//
//
//
// } catch (Exception e) {
// throw new IllegalArgumentException("错误的json序列化操作",e);
// }
objectMapper.object2json(object,writer,ALLOW_SINGLE_QUOTES);
}
public static void object2json(Object object,File writer) {
objectMapper.object2json(object,writer,true) ;
}
public static byte[] object2jsonAsbyte(Object object,boolean ALLOW_SINGLE_QUOTES) {
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(Feature.ALLOW_SINGLE_QUOTES, ALLOW_SINGLE_QUOTES);
// try {
// return mapper.writeValueAsBytes(object);
//
//
//
//
// } catch (Exception e) {
// throw new IllegalArgumentException("错误的json序列化操作",e);
// }
return objectMapper.object2jsonAsbyte( object, ALLOW_SINGLE_QUOTES);
}
public static byte[] object2jsonAsbyte(Object object) {
return objectMapper.object2jsonAsbyte(object,true) ;
}
public static String tostring(Object data)
{
StringBuffer ret = new StringBuffer();
tostring(ret ,data);
return ret.toString();
}
public static void tostring(StringBuffer ret ,Object data)
{
if(data == null )
{
return ;
}
else if(!data.getClass().isArray())
{
ret.append(data.toString());
}
else
{
int size = Array.getLength(data);
ret.append("{");
for(int i = 0; i < size; i ++)
{
if(i == 0)
{
}
else
{
ret.append(",");
}
tostring(ret ,Array.get(data, i));
}
ret.append("}");
}
}
public static String formatTimeToString(long mss) {
long days = mss / (1000 * 60 * 60 * 24);
long hours = (mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minutes = (mss % (1000 * 60 * 60)) / (1000 * 60);
long seconds = (mss % (1000 * 60)) / 1000;
StringBuffer sb = new StringBuffer();
if (days != 0) {
sb.append(days + "天");
}
if (hours != 0) {
sb.append(hours + "小时");
}
if (minutes != 0) {
sb.append(minutes + "分钟");
}
if (seconds != 0) {
sb.append(seconds + "秒");
}
return sb.toString();
}
public static Enumeration arryToenum(final Object[] values)
{
return new Enumeration()
{
int length = values!= null ?values.length:0;
int count = 0;
@Override
public boolean hasMoreElements() {
return count < length;
}
@Override
public Object nextElement() {
Object element = values[count];
count ++ ;
return element;
}
};
}
public static String native2ascii( String s )
{
StringBuffer res = new StringBuffer();
for ( int i = 0; i < s.length(); i++ ){
char ch = s.charAt( i );
int val = (int) ch;
if ( ch == '\r' ) continue;
if ( val >= 0 && val < 128 && ch != '\n' && ch != '\\' ) res.append( ch );
else{
res.append( "\\u" );
String hex = Integer.toHexString( val );
for( int j = 0; j < 4 - hex.length(); j++ ) res.append( "0" );
res.append( hex );
}
}
return res.toString();
}
public static String ascii2native( String s )
{
StringBuffer res = new StringBuffer(s.length());
for ( int i = 0; i < s.length(); i++ ){
char ch = s.charAt( i );
if (ch == '\\' && i+1>=s.length()){
res.append(ch);
break;
}
if ( ch != '\\') res.append( ch );
else {
switch (s.charAt(i+1)) {
case 'u':
res.append( (char) Integer.parseInt( s.substring( i+2, i+6 ), 16 ) );
i += 5;
break;
case 'n': res.append('\n'); i++; break;
case 't': res.append('\t'); i++; break;
case 'r': res.append('\r'); i++; break;
default: break;
}
}
}
return res.toString();
}
/**
* determine the OS name
*
* @return The name of the OS
*/
public static final String getOS() {
return System.getProperty("os.name");
}
/**
* @return True if the OS is a Windows derivate.
*/
public static final boolean isWindows() {
return getOS().startsWith("Windows");
}
/**
* @return True if the OS is a Linux derivate.
*/
public static final boolean isLinux() {
return getOS().startsWith("Linux");
}
/**
* @return True if the OS is an OSX derivate.
*/
public static final boolean isOSX() {
return getOS().toUpperCase().contains("OS X");
}
/**
* Constructs a new String
by decoding the specified array of bytes using the UTF-8 charset.
*
* @param bytes
* The bytes to be decoded into characters
* @return A new String
decoded from the specified array of bytes using the UTF-8 charset,
* or null
if the input byte array was null
.
* @throws NullPointerException
* Thrown if {@link Charsets#UTF_8} is not initialized, which should never happen since it is
* required by the Java platform specification.
* @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
*/
public static String newStringUtf8(final byte[] bytes) {
return newString(bytes, Charsets.UTF_8);
}
/**
* Constructs a new String
by decoding the specified array of bytes using the given charset.
*
* @param bytes
* The bytes to be decoded into characters
* @param charset
* The {@link Charset} to encode the String
* @return A new String
decoded from the specified array of bytes using the given charset,
* or null
if the input byte array was null
.
* @throws NullPointerException
* Thrown if {@link Charsets#UTF_8} is not initialized, which should never happen since it is
* required by the Java platform specification.
*/
private static String newString(final byte[] bytes, final Charset charset) {
return bytes == null ? null : new String(bytes, charset);
}
/**
* Encodes the given string into a sequence of bytes using the US-ASCII charset, storing the result into a new byte
* array.
*
* @param string
* the String to encode, may be null
* @return encoded bytes, or null
if the input string was null
* @throws NullPointerException
* Thrown if {@link Charsets#US_ASCII} is not initialized, which should never happen since it is
* required by the Java platform specification.
* @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
* @see Standard charsets
*/
public static byte[] getBytesUsAscii(final String string) {
return getBytes(string, Charsets.US_ASCII);
}
/**
* Encodes the given string into a sequence of bytes using the UTF-16 charset, storing the result into a new byte
* array.
*
* @param string
* the String to encode, may be null
* @return encoded bytes, or null
if the input string was null
* @throws NullPointerException
* Thrown if {@link Charsets#UTF_16} is not initialized, which should never happen since it is
* required by the Java platform specification.
* @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
* @see Standard charsets
*/
public static byte[] getBytesUtf16(final String string) {
return getBytes(string, Charsets.UTF_16);
}
/**
* Encodes the given string into a sequence of bytes using the UTF-16BE charset, storing the result into a new byte
* array.
*
* @param string
* the String to encode, may be null
* @return encoded bytes, or null
if the input string was null
* @throws NullPointerException
* Thrown if {@link Charsets#UTF_16BE} is not initialized, which should never happen since it is
* required by the Java platform specification.
* @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
* @see Standard charsets
*/
public static byte[] getBytesUtf16Be(final String string) {
return getBytes(string, Charsets.UTF_16BE);
}
/**
* Encodes the given string into a sequence of bytes using the UTF-16LE charset, storing the result into a new byte
* array.
*
* @param string
* the String to encode, may be null
* @return encoded bytes, or null
if the input string was null
* @throws NullPointerException
* Thrown if {@link Charsets#UTF_16LE} is not initialized, which should never happen since it is
* required by the Java platform specification.
* @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
* @see Standard charsets
*/
public static byte[] getBytesUtf16Le(final String string) {
return getBytes(string, Charsets.UTF_16LE);
}
/**
* Encodes the given string into a sequence of bytes using the UTF-8 charset, storing the result into a new byte
* array.
*
* @param string
* the String to encode, may be null
* @return encoded bytes, or null
if the input string was null
* @throws NullPointerException
* Thrown if {@link Charsets#UTF_8} is not initialized, which should never happen since it is
* required by the Java platform specification.
* @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
* @see Standard charsets
*/
public static byte[] getBytesUtf8(final String string) {
return getBytes(string, Charsets.UTF_8);
}
/**
* Calls {@link String#getBytes(Charset)}
*
* @param string
* The string to encode (if null, return null).
* @param charset
* The {@link Charset} to encode the String
* @return the encoded bytes
*/
private static byte[] getBytes(final String string, final Charset charset) {
if (string == null) {
return null;
}
return string.getBytes(charset);
}
}