字符串操作工具 StringTools
2018-09-19
package com.aicaipiao.client.common;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.Inflater;
public class StringTools {
/**
* 产生随机字符串
*/
private static Random randGen = null;
private static char[] numbersAndLetters = null;
private static Object initLock = new Object();
private static Random randGenNumber = null;
private static char[] numbersAndLettersNumber = null;
private static Object initLockNumber = new Object();
public static final String parserArrayToString(String[] array,String splter){
StringBuffer strBuff=new StringBuffer();
for(String str:array){
strBuff.append(str);
strBuff.append(splter);
}
strBuff.delete(strBuff.toString().length()-splter.length(),strBuff.toString().length());
return strBuff.toString();
}
public static final String randomString(int length) {
if (length < 1) {
return null;
}
if (randGen == null) {
synchronized (initLock) {
if (randGen == null) {
randGen = new Random();
numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
}
}
}
char[] randBuffer = new char[length];
for (int i = 0; i < randBuffer.length; i++) {
randBuffer[i] = numbersAndLetters[randGen.nextInt(62)];
}
return new String(randBuffer);
}
public static final String randomNumberString(int length) {
if (length < 1) {
return null;
}
if (randGenNumber == null) {
synchronized (initLockNumber) {
if (randGenNumber == null) {
randGenNumber = new Random();
numbersAndLettersNumber = ("0123456789")
.toCharArray();
}
}
}
char[] randBuffer = new char[length];
for (int i = 0; i < randBuffer.length; i++) {
randBuffer[i] = numbersAndLettersNumber[randGenNumber.nextInt(10)];
}
return new String(randBuffer);
}
final static public String getStringFillZero(String str,int length){
if(str.length( ) == length){
return str;
}
int fillLength = length - str.length();
for(int i = 0;i
str = "0"+str;
}
return str;
}
final static public boolean isValueIdTokenString(String tokenString,String split,String value){
String [] str = tokenString.split(split);
for(int i=0;i
if(str[i].equals(value)){
return true;
}
}
return false;
}
/**
* @描述:解析http头里的参数值
* @param header
* @return
*/
final static public HashMap getParametersByHttpHead(String header) {
String data = header.substring(header.indexOf("?") + 1, header
.indexOf(" HTTP"));
return getParametersByContents(data);
}
/**
* @描述:解析 key=value&key=value的键值
* @param contents
* @return
*/
final static public HashMap getParametersByContents(String contents) {
HashMap map = new HashMap();
String[] keyValues = contents.split("&");
for (int i = 0; i < keyValues.length; i++) {
String key = keyValues[i].substring(0, keyValues[i].indexOf("="));
String value = keyValues[i]
.substring(keyValues[i].indexOf("=") + 1);
map.put(key, value);
}
return map;
}
/**
* @描述:解析 key=value&key=value的键值
* @param contents
* @return
*/
final static public HashMap getParametersByContents(String contents,String charset) {
System.out.println(contents);
HashMap map = new HashMap();
String[] keyValues = contents.split("&");
for (int i = 0; i < keyValues.length; i++) {
String key = keyValues[i].substring(0, keyValues[i].indexOf("="));
String value = keyValues[i]
.substring(keyValues[i].indexOf("=") + 1);
if(charset != null && !"".equals(charset)){
try {
value = java.net.URLDecoder.decode(value, charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
map.put(key, value);
}
return map;
}
/**
* @描述:将map转成key=value&key=value
* @param contents
* @return
*/
final static public String getStringByHashMap(Map map) {
StringBuffer sb = new StringBuffer();
Iterator it = map.keySet().iterator();
while(it.hasNext()){
Object key = it.next();
Object value = map.get(key);
sb.append(key.toString()).append("=").append(value.toString()).append("&");
}
if(sb.length()>0){
sb.deleteCharAt(sb.length()-1);
}
return sb.toString();
}
/**
* @描述:将ActionContext 里而的Parameter map转成key=value&key=value
* @param contents
* @return
*/
final static public String getStringByActionHashMap(Map map) {
StringBuffer sb = new StringBuffer();
Iterator it = map.keySet().iterator();
while(it.hasNext()){
Object key = it.next();
Object value = map.get(key);
if(value instanceof String[]){
String [] values = (String[])value;
StringBuffer subSb = new StringBuffer();
if(values!=null){
for(int i=0;i
subSb.append(values[i]).append("|");
}
if(subSb.length()>0){
subSb.deleteCharAt(subSb.length()-1);
}
}
sb.append(key.toString()).append("=").append(subSb.toString()).append("&");
}
}
if(sb.length()>0){
sb.deleteCharAt(sb.length()-1);
}
return sb.toString();
}
/**
* @描述:将map转成key=value&key=value
* @param contents
* @return
*/
final static public String getStringByHashMap(HashMap map,String chartset)throws Exception {
StringBuffer sb = new StringBuffer();
Iterator it = map.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
String value = map.get(key);
sb.append(key).append("=").append(URLEncoder.encode(value, chartset)).append("&");
}
if(sb.length()>0){
sb.deleteCharAt(sb.length()-1);
}
return sb.toString();
}
/**
* 把给定的字符串转换为Base64编码
*
* @param source
* 需要进行转换的字符串
* @return 转换后的结果,如果source为null,则返回null
*/
public static String EncodeBase64(String source) {
if (source == null)
return null;
return new String(org.apache.commons.codec.binary.Base64
.encodeBase64(source.getBytes()));
}
/**
* 把base64编码的字符串进行解码并返回原字符串
*
* @param source
* 需要进行解码的Base64编码的字符串
* @return 解码后的原字符串,如果错误则返回null
*/
public static String DecodeBase64(String source) {
if (source == null)
return null;
try {
return new String(Base64Util.decode(source));
} catch (Exception ex) {
return null;
}
}
public static String[] split(String str, char delim) {
if(str == null) return null;
if(str.trim().equals("")) return new String[0];
int count = 1;
char c[] = str.toCharArray();
for(int i = 0; i < c.length; i++) {
if(c[i] == delim) {
count++;
}
}
String s[] = new String[count];
int index = 0;
StringBuffer sb = new StringBuffer();
for(int i = 0; i < c.length; i++) {
if(c[i] == delim) {
s[index] = sb.toString();
sb = new StringBuffer();
index ++;
} else {
sb.append(c[i]);
}
}
s[index] = sb.toString();
return s;
}
static public String decodeForwardUrl(String forwardUrl){
forwardUrl = StringTools.DecodeBase64(forwardUrl);
/**
* 以下的代码是为了让转向地址携带的参数能正常传递
* 如号码格式里面的 % 这些字符必须经过URLEncode才能被正常解析
*/
String pre = "";
String bak = forwardUrl.substring(
forwardUrl.indexOf("?") + 1, forwardUrl.length());
String area[] = bak.split("\\&");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < area.length; i++) {
System.out.println("area" + area[i]);
String[] peace = area[i].split("\\=");
if (peace.length == 2) {
try {
sb.append(peace[0]).append("=").append(
URLEncoder.encode(peace[1], "GBK"))
.append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else if (peace.length == 1){
System.out.println("Warning the empty parameter is:"+peace[0]);
//sb.append(peace[0]).append("=").append("").append("&");
}
}
if(sb.length()>0){
sb.deleteCharAt(sb.length()-1);
pre = forwardUrl.substring(0, forwardUrl
.indexOf("?") + 1);
}else{
//后面没有参数,不用带 ?
if(forwardUrl.indexOf("?") != -1){
pre = forwardUrl.substring(0, forwardUrl
.indexOf("?"));
}
}
forwardUrl = pre + sb.toString();
return forwardUrl;
}
public boolean isNumber(String str){
try{
Integer.valueOf(str);
return true;
}catch(Exception e){
return false;
}
}
/**
* zip压缩
* @param data String
* @return byte[]
*/
public static byte[] compress( byte[] data ) {
byte[] result = new byte[0];
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
DeflaterOutputStream dos = new DeflaterOutputStream( baos ) ;
dos.write(data) ;
dos.finish() ;
result = baos.toByteArray() ;
dos.close() ;
baos.close() ;
} catch( Exception ex ) {
ex.printStackTrace() ;
}
return result ;
}
public static byte[] decompress(byte[] data) {
byte[] result = new byte[0];
ByteArrayOutputStream o = new ByteArrayOutputStream();
try {
byte[] temp = new byte[8192];
Inflater inflater = new Inflater();
inflater.setInput(data);
int got;
while (!inflater.finished())
{
got = inflater.inflate(temp);
o.write(temp, 0, got);
}
// int size = inflater.inflate(temp);
// System.out.println("size:" + size + ",max limit:" + temp.length );
inflater.end();
//result = new byte[size];
// System.arraycopy(temp,0,result,0,size);
} catch (Exception ex) {
ex.printStackTrace();
}
return o.toByteArray();
}
public static String getDomain(String str){
if(str.indexOf("http://") != 0){
return "";
}
if(str.indexOf(".com") != -1
|| str.indexOf(".net") != -1
|| str.indexOf(".gov") != -1
|| str.indexOf(".org") != -1
|| str.indexOf(".cn") != -1){
return str.substring(str.indexOf(".")+1, str.indexOf(".",str.indexOf(".")+1));
}else{
return "";
}
}
/*将汉字转换为Unicode
* Converts unicodes to encoded \uxxxx and escapes
* special characters with a preceding slash
*/
public static String toUnicode(String theString,boolean escapeSpace,
boolean escapeUnicode) {
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
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)) & escapeUnicode ) {
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();
}
/**
* Convert a nibble to a hex character
* @param nibble the nibble to convert.
*/
private static char toHex(int nibble) {
return hexDigit[(nibble & 0xF)];
}
/** A table of hex digits */
private static final char[] hexDigit = {
"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
};
static public void main(String[] args)throws Exception {
//43532
//5000
String str = "http://sesd.2caipiao.com/sss/index.jsp";
str =str.substring(str.indexOf(".")+1, str.indexOf(".",str.indexOf(".")+1));
System.out.println(str);
//System.out.println("dudu123456".indexOf("dudu"));
//System.out.println("dudu123456".substring(4));
}
/**
* 替换字符串中存在手机号码的中间几位为****
* @param str
* @return
*/
public static String replaceMobile(String str) {
try {
Pattern p = Pattern
.compile("^(?:13\\d|15\\d|18[056789])-?\\d{5}(\\d{3}|\\*{3})$");
Matcher m = p.matcher(str);
if (m.matches()) {
return str.substring(0, 3) + "****" + str.substring(7, 11);
} else {
return str;
}
} catch (Exception e) {
return str;
}
}
/**
* 取前length个字符,后面用...
* @param str
* @param length
* @return
*/
public static String cutString(String str,int length) {
if(str==null || str.equals("")) return str;
int strLen = str.length();
if(strLen-1
return str;
}
try {
return str.substring(0, length)+"...";
} catch (Exception e) {
return str;
}
}
public static boolean compareString(String str1,String str2) {
if(str1==null) str1="";;
if(str2==null) str2="";;
return !str1.equals(str2);
}
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。
http://www.pinlue.com/style/images/nopic.gif