字符串处理StringUtil

package com.saicfc.saicifx3.util;

import java.awt.FontMetrics;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.security.MessageDigest;
import java.text.DecimalFormat;
import java.text.ParsePosition;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * String Utility Class This is used to encode passwords programmatically
 * 
 * <p>
 * <a h ref="StringUtil.java.html"><i>View Source</i></a>
 * </p>
 * 
 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
 */
public class StringUtil {
	// ~ Static fields/initializers
	// =============================================

	private final static Log log = LogFactory.getLog(StringUtil.class);

	private static DecimalFormat decimalFormat = new DecimalFormat(
			"#,###,###,###.##");

	// ~ Methods
	// ================================================================

	
	/**
	 * Encode a string using Base64 encoding. Used when storing passwords as
	 * cookies.
	 * 
	 * This is weak encoding in that anyone can use the decodeString routine to
	 * reverse the encoding.
	 * 
	 * @param str
	 * @return String
	 */
	public static String encodeString(String str) {
		sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
		return encoder.encodeBuffer(str.getBytes()).trim();
	}

	/**
	 * Decode a string using Base64 encoding.
	 * 
	 * @param str
	 * @return String
	 */
	public static String decodeString(String str) {
		sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();
		try {
			return new String(dec.decodeBuffer(str));
		} catch (IOException io) {
			throw new RuntimeException(io.getMessage(), io.getCause());
		}
	}

	// Deprecated
	public static String replace(String str, String srcStr, String desStr) {
		String returnValue = "";
		String temp = "";
		int start = str.indexOf(srcStr);
		int len = srcStr.length();
		while (start > -1) {
			temp = str.substring(0, start);
			returnValue = returnValue + temp + desStr;
			str = str.substring(start + len);
			start = str.indexOf(srcStr);
		}
		returnValue = returnValue + str;
		return returnValue;
	}


	// 以flag为标记,把str分割为String数组。
	public static String[] getStringArra(String str, String flag) {
		String[] result = null;
		StringTokenizer tem = new StringTokenizer(str, flag);
		int n = tem.countTokens();
		result = new String[n];
		for (int i = 0; tem.hasMoreTokens(); i++)
			result[i] = tem.nextToken();
		return result;
	}

	public static String[] trim(String[] paramArray) {
		if (ArrayUtils.isEmpty(paramArray)) {
			return paramArray;
		}
		String[] resultArray = new String[paramArray.length];
		for (int i = 0; i < paramArray.length; i++) {
			String param = paramArray[i];
			resultArray[i] = StringUtils.trim(param);
		}
		return resultArray;
	}

	public static int CHINESECHARTYPE = 0;

	public static int ENGLISHCHARTYPE = 1;

	public static String LEFT = "l";

	public static String CENTER = "0";

	public static String RIGHT = "r";

	public static String __ISO_8859_1;
	static {
		String iso = System.getProperty("ISO_8859_1");
		if (iso != null) {
			__ISO_8859_1 = iso;
		} else {
			try {
				new String(new byte[] { (byte) 20 }, "ISO-8859-1");
				__ISO_8859_1 = "ISO-8859-1";
			} catch (java.io.UnsupportedEncodingException e) {
				__ISO_8859_1 = "ISO8859_1";
			}
		}
	}

	private static char[] lowercases = { '\000', '\001', '\002', '\003',
			'\004', '\005', '\006', '\007', '\010', '\011', '\012', '\013',
			'\014', '\015', '\016', '\017', '\020', '\021', '\022', '\023',
			'\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033',
			'\034', '\035', '\036', '\037', '\040', '\041', '\042', '\043',
			'\044', '\045', '\046', '\047', '\050', '\051', '\052', '\053',
			'\054', '\055', '\056', '\057', '\060', '\061', '\062', '\063',
			'\064', '\065', '\066', '\067', '\070', '\071', '\072', '\073',
			'\074', '\075', '\076', '\077', '\100', '\141', '\142', '\143',
			'\144', '\145', '\146', '\147', '\150', '\151', '\152', '\153',
			'\154', '\155', '\156', '\157', '\160', '\161', '\162', '\163',
			'\164', '\165', '\166', '\167', '\170', '\171', '\172', '\133',
			'\134', '\135', '\136', '\137', '\140', '\141', '\142', '\143',
			'\144', '\145', '\146', '\147', '\150', '\151', '\152', '\153',
			'\154', '\155', '\156', '\157', '\160', '\161', '\162', '\163',
			'\164', '\165', '\166', '\167', '\170', '\171', '\172', '\173',
			'\174', '\175', '\176', '\177' };

	public static String asciiToLowerCase(String s) {
		char[] c = s.toCharArray();
		for (int i = c.length; i-- > 0;) {
			if (c[i] <= 127) {
				c[i] = lowercases[c[i]];
			}
		}
		return (new String(c));
	}

	public static int indexFrom(String s, String chars) {
		for (int i = 0; i < s.length(); i++) {
			if (chars.indexOf(s.charAt(i)) >= 0) {
				return i;
			}
		}
		return -1;
	}

	public static String _replace(String s, String sub, String with) {
		int c = 0;
		int i = s.indexOf(sub, c);
		if (i == -1) {
			return s;
		}

		StringBuffer buf = new StringBuffer(s.length() + with.length());

		synchronized (buf) {
			do {
				buf.append(s.substring(c, i));
				buf.append(with);
				c = i + sub.length();
			} while ((i = s.indexOf(sub, c)) != -1);

			if (c < s.length()) {
				buf.append(s.substring(c, s.length()));

			}
			return buf.toString();
		}
	}

	public static String unquote(String s) {
		if ((s.startsWith("\"") && s.endsWith("\""))
				|| (s.startsWith("'") && s.endsWith("'"))) {
			s = s.substring(1, s.length() - 1);
		}
		return s;
	}

	public static void append(StringBuffer buf, String s, int offset, int length) {
		synchronized (buf) {
			int end = offset + length;
			for (int i = offset; i < end; i++) {
				if (i >= s.length()) {
					break;
				}
				buf.append(s.charAt(i));
			}
		}
	}

	public static String nonNull(String s) {
		if (s == null) {
			return "";
		}
		return s;
	}

	private static String[] ZEROS = { "", "0", "00", "000", "0000", "00000",
			"000000", "0000000", "00000000", "000000000" };

	public static String[] CHINESECHAR = { "", "一", "二", "三", "四", "五", "六",
			"七", "八", "九", "十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八",
			"十九", "二十", "二十一", "二十二", "二十三", "二十四", "二十五", "二十六", "二十七", "二十八",
			"二十九", "三十", "三十一", "三十二", "三十三", "三十四", "三十五", "三十六", "三十七",
			"三十八", "三十九" };

	public static String[] ENGLISHCHAR = { "A", "B", "C", "D", "E", "F", "G",
			"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
			"U", "V", "W", "X", "Y", "Z" };

	static public String retrimString(String str, int maxlength) {
		int theLen = 0;
		str = str.trim();
		int i = 0;
		int size = str.getBytes().length;
		byte[] temp = str.getBytes();
		if (size > maxlength) {
			for (i = 0; i < size; i++) {
				if (temp[i] > 255) {
					if (theLen > maxlength) {
						theLen = theLen - 2;
						break;
					} else {
						theLen = theLen + 2;
					}
				} else {
					if (theLen > maxlength) {
						theLen = theLen - 1;
						break;
					} else {
						theLen = theLen + 1;
					}
				}
			}
			str = new String(str.getBytes(), 0, i);
		}
		return str;
	}

	static public String breakLine(String str) {
		if (str != null && str.length() > 0) {
			StringBuffer sb = new StringBuffer(str);
			int beginPos = -1;
			while ((beginPos = str.indexOf('\n')) > -1) {
				sb.replace(beginPos, beginPos + 1, "<br>");
				str = sb.toString();
			}
			str = replace(sb.toString(), " ", " ");
		}
		return str;
	}

	/***************************************************************************
	 * String methods.
	 * 
	 * 
	 **************************************************************************/
	/**
	 * 将一个字符串以某字符作为分隔符进行分隔(得到每段作为字符串的字符串数组).
	 * 
	 * @param str
	 *            被分隔的字符串
	 * @param delimiter
	 *            分隔符
	 * @return 分隔的结果
	 */
	public final static String[] splitString(String str, char delimiter) {
		return splitString(str, 0, delimiter);
	}

	public final static String[][] splitString(String str, char delimiter1,
			char delimiter2) {
		String[] a1 = splitString(str, delimiter1);
		if (a1 == null) {
			return null;
		}
		String a2[][] = new String[a1.length][];
		for (int i = 0; i < a1.length; i++) {
			a2[i] = splitString(a1[i], delimiter2);
		}
		return a2;
	}

	/**
	 * 将一个字符串从某位置开始以某字符作为分隔符进行分隔(得到每段作为字符串的字符串数组). <blockquote>
	 * 
	 * <pre>
	 *      String list[] = Utilities.splitString("AAAA,BBBB,CCCC,DDDDD",0,',')
	 *      // list 为  { "AAAA","BBBB","CCCC","DDDD" }
	 * </pre>
	 * 
	 * </blockquote>
	 * 
	 * @param str
	 *            被分隔的字符串
	 * @param istart
	 *            开始位置
	 * @param delimiter
	 *            分隔符
	 * @return 分隔的结果
	 */
	public final static String[] splitString(String str, int istart,
			char delimiter) {
		if (str == null) {
			return null;
		}
		int sl = str.length();
		int n = 0;
		for (int i = istart; i < sl; i++) {
			if (str.charAt(i) == delimiter) {
				n++;
			}
		}
		String[] sa = new String[n + 1];
		int i = istart, j = 0;
		for (; i < sl;) {
			int iend = str.indexOf(delimiter, i);
			if (iend < 0) {
				break;
			}
			sa[j++] = str.substring(i, iend);
			i = iend + 1;
		}
		sa[j++] = str.substring(i);
		return sa;
	}

	public static int getSubstringByLength(String[] text, int startIndex,
			int width, FontMetrics metrics) {
		int endIndex = startIndex;
		int index = 0;
		int size = text.length;
		int sumWidth = 0;
		for (index = startIndex; index < size; ++index) {
			sumWidth += metrics.stringWidth(text[index]);
			if (sumWidth == width) {
				endIndex = index;
				break;
			} else if (sumWidth > width) {
				endIndex = index - 1;
				break;
			}
		}
		if (index == size) {
			endIndex = size - 1;
		}
		return endIndex;
	}

	// 包含copy,startIndex,endIndex包含在获得的子串中
	public static String substring(String[] text, int startIndex, int endIndex) {
		StringBuffer sb = new StringBuffer();
		int index = 0;
		for (index = startIndex; index <= endIndex; ++index) {
			sb.append(text[index]);
		}
		return sb.toString();
	}

	// 包含copy,startIndex包含在获得的子串中
	public static String substring(String[] text, int startIndex) {
		StringBuffer sb = new StringBuffer();
		int index = 0;
		int size = text.length;
		for (index = startIndex; index < size; ++index) {
			sb.append(text[index]);
		}
		return sb.toString();
	}

	public static final String[] splitString(String s) {
		if (s == null) {
			return null;
		}
		int size = s.length();
		int index = 0;
		String as[] = new String[size];

		for (index = 0; index < size; ++index) {
			as[index] = s.substring(index, index + 1);
		}
		return as;
	}

	public static int findAtStringArray(String as[], Object obj) {
		if (as != null) {
			for (int i = 0; i < as.length; i++) {
				if (obj == as[i] || obj != null && obj.equals(as[i])) {
					return i;
				}
			}

		}
		return -1;
	}

	public static int findAtStringArrayNoCase(String as[], String s) {
		if (as != null) {
			for (int i = 0; i < as.length; i++) {
				if (s == as[i] || s != null && s.equalsIgnoreCase(as[i])) {
					return i;
				}
			}

		}
		return -1;
	}

	public final static String unicode2gb(String value)
			throws UnsupportedEncodingException {
		return new String(value.getBytes(), "GB2312");
	}

	public final static String gb2unicode(String value)
			throws UnsupportedEncodingException {
		return new String(value.getBytes("GB2312"));
	}

	public final static String gb2iso(String value) {
		if (value == null || value.trim().equals("")) {
			return "";
		}
		return value;
	}

	public final static String iso2gb(String value) {
		if (value == null || value.trim().equals("")) {
			return "";
		}
		try {
			return new String(value.getBytes("ISO8859_1"), "GBK");
		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
			return ex.getMessage();
		}
	}

	public final static String firstCapital(String value) {
		if (value == null) {
			return "";
		} else {
			return value.substring(0, 1).toUpperCase() + value.substring(1);
		}
	}

	public final static String emitValue(String value, boolean isShow) {
		if ((value == null) || (value.trim().equals(""))) {
			if (isShow) {
				return " ";
			} else {
				return "";
			}
		} else {
			return gb2iso(value);
		}
	}

	public final static String emitValue(String value, boolean isConvert,
			boolean isShow) {
		if ((value == null) || (value.trim().equals(""))) {
			if (isShow) {
				return " ";
			} else {
				return "";
			}
		} else {
			if (isConvert) {
				return gb2iso(value);
			} else {
				return value;
			}
		}
	}

	public static String toPaddedString(String s, int length) {
		return ZEROS[length - s.length()] + s;
	}

	public static String toPaddedString(String s, String padChar, int length,
			String alignment) {
		int size = s.length();
		int index = 0;
		if (size >= length) {
			return s;
		} else {
			int subLen = length - size;
			StringBuffer sb = new StringBuffer();
			for (index = 0; index < subLen; ++index) {
				sb.append(padChar);
			}
			if (alignment.equals(LEFT)) {
				return s + sb.toString();
			} else if (alignment.equals(RIGHT)) {
				return sb.toString() + s;
			} else {
				return s;
			}
		}
	}

	public static String convert(int countType, int index) {
		++index;
		int head = 0;
		int remain = 0;
		String value = "";
		if (countType == CHINESECHARTYPE) {
			head = index / 10;
			remain = index % 10;
			if (head > 0) {
				if (head > 1) {
					value = CHINESECHAR[head];
				}
				value += "十";
			}
			// if(remain>0)
			value += CHINESECHAR[remain];
			return value;
		} else if (countType == ENGLISHCHARTYPE) {
			if (index >= ENGLISHCHAR.length) {
				return "";
			} else {
				return ENGLISHCHAR[index];
			}
		} else {
			return "";
		}
	}

	static public String digit2Char(String digit) {
		String value = "";
		String sub = null;
		int index = 0;
		int size = digit.length();
		for (index = 0; index < size; ++index) {
			sub = digit.substring(index, index + 1);
			value += ENGLISHCHAR[Integer.parseInt(sub)];
		}
		return value;
	}

	static public String getPRN() {
		Calendar rightNow = Calendar.getInstance();
		Random random = new Random(rightNow.getTime().getTime());
		long value = Math.abs(random.nextLong());
		String key = StringUtil.digit2Char(String.valueOf(value));
		return key;
	}

	static public boolean checkBoundary(String preValue, String currValue) {
		if (preValue == null) {
			return false;
		} else {
			if (preValue.equals(currValue)) {
				return false;
			} else {
				return true;
			}
		}
	}

	static public String escapeConvert(String value) {
		HashMap<String, String> term = new HashMap<String, String>();
		// term.put("&","&");
		term.put("<", "<");
		term.put(">", ">");
		term.put("\"", """);
		term.put("'", "'");
		value = replace(value, "&", "&");
		Iterator iterator = term.keySet().iterator();
		String key = null;
		String escape = null;
		while (iterator.hasNext()) {
			key = (String) iterator.next();
			escape = (String) term.get(key);
			value = replace(value, key, escape);
		}
		return value;
	}

	// 在指定的长度的位置增加一个标记字符
	static public String append(String value, String tag, int subLen) {
		int size = value.length() / subLen;
		int index = 0;
		StringBuffer sb = new StringBuffer();
		for (index = 0; index < size; ++index) {
			sb.append(value.substring(index * subLen, (index + 1) * subLen));
			sb.append(tag);
		}
		// 处理最后的尾数
		size = value.length() % subLen;
		sb.append(value.substring(index * subLen, index * subLen + size));
		sb.append(tag);
		return sb.toString();

	}

	// 序列号web输出
	static public String seriesWebEmit(int size, String format) {
		int index = 0;
		StringBuffer sb = new StringBuffer();
		for (index = 0; index < size; ++index) {
			sb.append("<option value=\"");
			sb.append(index);
			sb.append("\">");
			sb.append(StringUtil.replace(format, "DD", String
					.valueOf(index + 1)));
			sb.append("</option> \r\n");
		}
		return sb.toString();
	}

	/* 模糊匹配 */
	public static boolean matchIP(String templete, String value) {
		StringTokenizer templeteST = new StringTokenizer(templete + ".", ".");
		StringTokenizer valueST = new StringTokenizer(value + ".", ".");
		String s = null;
		String sub = null;
		boolean result = true;
		while (templeteST.hasMoreElements()) {
			s = (String) templeteST.nextElement();
			sub = (String) valueST.nextElement();
			if (s.indexOf("*") > -1) {
				continue;
			} else {
				if (!s.equals(sub)) {
					result = false;
					break;
				}
			}
		}

		return result;
	}

	// 对字符串进行缩略处理
	static public String breviary(String value, String breviaryTag, int subLen) {
		if (value.length() <= subLen)
			return value;
		else {
			return value.substring(0, subLen) + breviaryTag;
		}
	}

	public static String formatCurrency(BigDecimal bigDecimal) {
		if (bigDecimal == null) {
			return null;
		}
		return decimalFormat.format(bigDecimal
				.setScale(2, RoundingMode.HALF_UP));
	}

	public static String format(Object o, String pattern) {
		if (o == null) {
			o = 0;
		}
		DecimalFormat format = new DecimalFormat(pattern);
		return format.format(o);
	}

	public static BigDecimal parseCurrency(String bigDecimalStr) {
		decimalFormat.setParseBigDecimal(true);
		if (StringUtils.isBlank(bigDecimalStr)) {
			return null;
		}
		BigDecimal bigDecimal = null;
		try {
			bigDecimal = (BigDecimal) decimalFormat.parse(bigDecimalStr,
					new ParsePosition(0));
		} catch (Exception e) {
			return null;
		}
		return bigDecimal.setScale(2, RoundingMode.HALF_UP);
	}

	/**
	 * 分割字符串({\d})并替换
	 * 
	 * @param value
	 * @param obj
	 * @return
	 */
	public static String splitReplaceParam(String value, Object[] obj) {
		List<String> list = new ArrayList<String>();
		String[] s = value.split("\\{");
		for (int i = 1; i < s.length; i++) {
			if (s[i].indexOf("}") < 0) {
				continue;
			}
			String key = s[i].substring(0, s[i].indexOf("}"));
			if (list.isEmpty()) {
				list.add(key);
			} else if (!list.contains(key)) {
				list.add(key);
			}
		}
		Collections.sort(list);
		Object[] obj1 = list.toArray();
		for (int i = 0; i < obj.length; i++) {
			value = value.replaceAll("\\{" + obj1[i] + "}", String
					.valueOf(obj[i]));
		}
		return value;
	}

	/**
	 * 返回16位数字:请14为年月日时分秒,后2位随机
	 * 
	 * @return
	 */
	public static String getRandomNum() {
		Date date = new Date();
		return new StringBuilder().append(
				DateUtil.formatDateToString(date, "yyyyMMddHHmmss")).append(
				Math.round(Math.random() * date.getTime())).substring(0, 16);
	}

	public static void main(String[] args) {
		System.out.println(parseCurrency("1231231.2356"));
	}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不讲理的胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值