/** * <p>Copyright: Copyright (c) 2012</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.script.util.impl; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.WordUtils; import org.apache.commons.lang.time.DateFormatUtils; import com.hundsun.ares.studio.core.util.SqlFormater; import com.hundsun.ares.studio.jres.script.util.IScriptStringUtil; /** * @author lvgao * */ public class ScriptStringUtilImpl extends StringUtils implements IScriptStringUtil{ public String getCurrentDate(String pattern) { return DateFormatUtils.format(new Date(), pattern); } /** 7λASCII�ַ���Ҳ����ISO646-US��Unicode�ַ����Ļ���������*/ public static final String US_ASCII = "US-ASCII"; private static final char[] hexDigit = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; /** * ���ַ�������� Unicode�� * * @param theString ��ת����Unicode������ַ����� * @param escapeSpace �Ƿ���Կո� * * @return ����ת����Unicode������ַ����� */ public String toUnicode(String theString, boolean escapeSpace) { int len = theString.length(); int bufLen = len * 2; if (bufLen < 0) { bufLen = Integer.MAX_VALUE; } StringBuffer outBuffer = new StringBuffer(bufLen); for(int x=0; x<len; x++) { char aChar = theString.charAt(x); // Handle common case first, selecting largest block that // avoids the specials below if ((aChar > 61) && (aChar < 127)) { if (aChar == '\\') { outBuffer.append('\\'); outBuffer.append('\\'); continue; } outBuffer.append(aChar); continue; } switch(aChar) { case ' ': if (x == 0 || escapeSpace) outBuffer.append('\\'); outBuffer.append(' '); break; case '\t':outBuffer.append('\\'); outBuffer.append('t'); break; case '\n':outBuffer.append('\\'); outBuffer.append('n'); break; case '\r':outBuffer.append('\\'); outBuffer.append('r'); break; case '\f':outBuffer.append('\\'); outBuffer.append('f'); break; case '=': // Fall through case ':': // Fall through case '#': // Fall through case '!': outBuffer.append('\\'); outBuffer.append(aChar); break; default: if ((aChar < 0x0020) || (aChar > 0x007e)) { outBuffer.append('\\'); outBuffer.append('u'); outBuffer.append(toHex((aChar >> 12) & 0xF)); outBuffer.append(toHex((aChar >> 8) & 0xF)); outBuffer.append(toHex((aChar >> 4) & 0xF)); outBuffer.append(toHex( aChar & 0xF)); } else { outBuffer.append(aChar); } } } return outBuffer.toString(); } private static char toHex(int nibble) { return hexDigit[(nibble & 0xF)]; } /** * �� Unicode ��ת���ɱ���ǰ�������ַ����� * * @param input Unicode������ַ����顣 * @param off ת������ʼƫ������ * @param len ת�����ַ����ȡ� * @param convtBuf ת���Ļ����ַ����顣 * * @return ���ת�������ر���ǰ�������ַ����� */ public String fromUnicode(char[] input, int off, int len, char[] convtBuf) { if (convtBuf.length < len) { int newLen = len * 2; if (newLen < 0) { newLen = Integer.MAX_VALUE; } convtBuf = new char[newLen]; } char aChar; char[] out = convtBuf; int outLen = 0; int end = off + len; while (off < end) { aChar = input[off++]; if (aChar == '\\') { aChar = input[off++]; if (aChar == 'u') { // Read the xxxx int value = 0; for (int i = 0; i < 4; i++) { aChar = input[off++]; switch (aChar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + aChar - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + 10 + aChar - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + 10 + aChar - 'A'; break; default: throw new IllegalArgumentException( "Malformed \\uxxxx encoding."); } } out[outLen++] = (char) value; } else { if (aChar == 't') { aChar = ' '; } else if (aChar == 'r') { aChar = ' '; } else if (aChar == 'n') { aChar = ' '; } else if (aChar == 'f') { aChar = ' '; } out[outLen++] = aChar; } } else { out[outLen++] = (char) aChar; } } return new String(out, 0, outLen); } /** * ���ڱȽ������ַ����������ֶ��Ƿ���ȫ��ͬ�� * * StringUtils.arrayEquals(null, null) = true * StringUtils.equals(null, String[]{"abc"}) = false * StringUtils.equals(String[]{"abc"}, null) = false * StringUtils.equals(String[]{"abc","qwe"}, String[]{"qwe","abc"}) = true * StringUtils.equals(String[]{"abc","qwe"}, String[]{"abc","qwe"}) = true * </pre> * * @param a * @param a2 * @return */ public boolean arrayEquals(String[] a, String[] a2) { if (a == a2) { return true; } if (a == null || a2 == null) { return false; } if (a2.length != a.length) { return false; } for (int i = 0; i < a.length; i++) { int j = 0; for (; j< a2.length; j++) { if (org.apache.commons.lang.StringUtils.equals(a[i], a2[j])) { break; } } if (j == a2.length) { return false; } } return true; } private static final String LINE_SEPARATOR = System.getProperty("line.separator"); public static String replaceLineSeparator(String original ) { String temp = StringUtils.replace(original, "\r\n", "\n") ; temp = StringUtils.replace( temp , "\r","\n" ); temp = StringUtils.replace( temp , "\n", LINE_SEPARATOR); return temp; } /** * ����һ���ַ���������ַ��������������� * <BR>�������е��ַ�����Ӧ�ù��� * <BR>���������õij��Ȼ�׼���ֽ�����һ��ȫ�ǵ���2����ǵij��ȣ�ֻ���ڵȿ�����ı༭���в鿴���ܵõ��dz�Ч�� * @param contents * @return */ public String genStringTable(List< List<String> > contents) { // �����ҳ�����ַ������鳤�� int maxLength = 0; for (List<String> content : contents) { maxLength = Math.max(maxLength, content.size()); } if (maxLength == 0) { return StringUtils.EMPTY; } // ���Ƚ������ַ�������ͳһ���ȣ�����ij����ÿհ��ַ������� // ͬʱ�ҳ�ÿһ�б���ij��� List<List<String>> contents_normalization = new ArrayList<List<String>>(); int[] widths = new int[maxLength]; for (int i = 0; i < contents.size(); i++) { List<String> content = contents.get(i); // ������Ȳ���Ҫ�仯��ֱ��ʹ��ԭʼ���󣬼���ʱ��ռ�ɱ� if (maxLength != content.size()) { List<String> newContent = new ArrayList<String>(); newContent.addAll(content); for (int j = content.size(); j < maxLength; j++) { newContent.add(StringUtils.EMPTY); } content = newContent; } contents_normalization.add(content); // ���ҳ��� for (int j = 0; j < content.size(); j++) { int len = StringUtils.defaultString(content.get(j)).getBytes().length; widths[j] = Math.max(len, widths[j]); } } StringBuffer result = new StringBuffer(); for (int i = 0; i < contents_normalization.size(); i++) { List<String> content = contents_normalization.get(i); for (int j = 0; j < content.size(); j++) { // ������Ҫ����Ŀո���������������ȥ�Ѿ�ռ�����������к���ռ2���ո񳤶� int len = StringUtils.defaultString(content.get(j)).getBytes().length; int spaceWidth = widths[j] - len + 1; // ���һ���ո���Էָ�����ռ����2����Ԫ�� result.append(StringUtils.defaultString(content.get(j))); result.append(StringUtils.repeat(" ", spaceWidth)); } result.append("\r\n"); } return result.toString(); } @Override public String getSQLFileHeader(String fileName, String userName, String date, String notes) { StringBuffer sb = new StringBuffer(); sb.append("-- -------------------------------------------------------------\r\n"); sb.append("-- " + "SQLfile" + " : "+ fileName+ "\r\n"); sb.append("-- Author : "+ userName+ "\r\n"); sb.append("-- Date : "+ date + "\r\n"); sb.append("-- Notes : "+ notes + "\r\n"); sb.append("-- -------------------------------------------------------------\r\n"); return sb.toString(); } @Override public StringBuffer getStringBuffer() { return new StringBuffer(); } public List<Object> getList(){ return new ArrayList<Object>(); } public Map getMap(){ return new LinkedHashMap(); } @Override public String getCHeadFileHeader(String fileName, String userName, String date, String notes) { return getFileHeader("Headfile",fileName,userName,date,notes); } private String getFileHeader(String headerName,String fileName, String userName, String date, String notes){ StringBuffer sb = new StringBuffer(); sb.append("/************************************************************\r\n"); sb.append(" *** " + headerName + " : "+ fileName+ "\r\n"); sb.append(" *** Author : "+ userName+ "\r\n"); sb.append(" *** Date : "+ date + "\r\n"); sb.append(" *** Notes : "+ notes + "\r\n"); sb.append(" ************************************************************/\r\n"); return sb.toString(); } @Override public String getPropertyFileHeader(String fileName, String userName, String date, String notes) { StringBuffer sb = new StringBuffer(); sb.append("#************************************************************\r\n"); sb.append("#*** Propertyfile : "+ fileName+ "\r\n"); sb.append("#*** Author : "+ userName+ "\r\n"); sb.append("#*** Date : "+ date + "\r\n"); sb.append("#*** Notes : "+ notes + "\r\n"); sb.append("#************************************************************\r\n"); return sb.toString(); } @Override public String getTxtFileHeader(String fileName, String userName, String date, String notes) { return getFileHeader("Txtfile",fileName,userName,date,notes); } @Override public String fixLength(String str, int len, char fill) { StringBuffer buffer = new StringBuffer(); buffer.append(str); for(int i = str.length(); i < len; i++){ buffer.append(fill); } return buffer.toString(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.script.util.IScriptStringUtil#starWith(java.lang.String, java.lang.String) */ @Override public boolean startWith(String str, String prefix) { return startsWith(str, prefix); } @Override public String format(String format, List<String> args) { return String.format(format, args.toArray()); } @Override public String capitalizeFully(String str, char[] delimiters) { return WordUtils.capitalizeFully(str, delimiters); } @Override public String uncapitalize(String str, char[] delimiters) { return WordUtils.uncapitalize(str, delimiters); } public String formatSql(String sql , String language){ return SqlFormater.formatSqlOfCreateStatement(sql, language); } }