package com.kingschan.blog.util;
import java.util.UUID;
/**
*
* <pre>
* 类名称:StringUtil
* 类描述: 字符串工具类
* 创建人:陈国祥 (kingschan)
* 创建时间:2012-12-04 上午11:27:16
* 修改人:Administrator
* 修改时间:2012-12-04 上午11:27:16
* 修改备注:
* @version V1.0
* </pre>
*/
public class StringUtil {
/**
* 将初始二进制字符串转换成字符串数组,以空格相隔
*
* @param str
* @return 字符串数组
*/
public static String[] StrToStrArray(String str) {
return str.split(" ");
}
/**
* 将二进制字符串转换成int数组
*
* @param binStr
* @return Int数组
*/
public static int[] BinstrToIntArray(String binStr) {
char[] temp = binStr.toCharArray();
int[] result = new int[temp.length];
for (int i = 0; i < temp.length; i++) {
result[i] = temp[i] - 48;
}
return result;
}
/**
* 将二进制字符串转换成Unicode字符串
*
* @param binStr
* @return unicode编码
*/
public static String BinstrToStr(String binStr) {
String[] tempStr = StrToStrArray(binStr);
char[] tempChar = new char[tempStr.length];
for (int i = 0; i < tempStr.length; i++) {
tempChar[i] = BinstrToChar(tempStr[i]);
}
return String.valueOf(tempChar);
}
/**
* 将二进制字符串转换为char
*
* @param binStr
* @return char
*/
public static char BinstrToChar(String binStr) {
int[] temp = BinstrToIntArray(binStr);
int sum = 0;
for (int i = 0; i < temp.length; i++) {
sum += temp[temp.length - 1 - i] << i;
}
return (char) sum;
}
/**
* Ascii码转成字符串
*
* @param value
* @return string
*/
public static String asciiToString(String value) {
StringBuffer sbu = new StringBuffer();
String[] chars = value.split(",");
for (int i = 0; i < chars.length; i++) {
sbu.append((char) Integer.parseInt(chars[i]));
}
return sbu.toString();
}
/**
* 将字符串转换成二进制字符串,以空格相隔
*
* @param str
* @return 二进制字符串
*/
public static String toBinary(String str) {
char[] strChar = str.toCharArray();
String result = "";
for (int i = 0; i < strChar.length; i++) {
result += Integer.toBinaryString(strChar[i]) + " ";
}
return result;
}
/**
* 将字符串转成ASCII码
*
* @param value
* @return ascii码
*/
public static String toAscii(String value) {
StringBuffer sbu = new StringBuffer();
char[] chars = value.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (i != chars.length - 1) {
sbu.append((int) chars[i]).append(",");
} else {
sbu.append((int) chars[i]);
}
}
return sbu.toString();
}
/**
* 转UTF-8
*
* @param inPara 需要转换的gb2312中文字符
* @return 该中文字符对应的UTF-8编码的字符
*/
public static String toUTF8(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;
rtStr = rtStr + "" + Integer.toHexString(ascChr) + ";";
}
return rtStr;
}
/**
* 把null转成 ""
*
* @param obj 对象
* @return 空字符串
*/
public static String null2Empty(Object obj) {
if (null == obj) {
return "";
} else {
return obj.toString().trim();
}
}
/**
* 把null转成 ""
* @param obj
* @return
*/
@Deprecated
public static String nullToEmpty(Object obj) {
return null2Empty(obj);
}
/**
* 去掉所有 空格 换行 回车
*
* @param obj 对象
* @return 字符串
*/
public static String replaceSpaceLine(Object obj) {
return null2Empty(obj).replaceAll("\\s*|/t|/r|/n", "");
}
/**
* 将已逗号分隔的字符串转成适合sql in(xxxxx)的格式
*
* @param str a,b,c,d...
* @return 'a','b','c'...
*/
public static String convertStrToSqlInstr(String str, boolean isNumberic) {
StringBuffer sb = new StringBuffer();
String[] args = str.split(",");
for (int i = 0; i < args.length; i++) {
sb.append("'");
sb.append(args[i]);
sb.append("'");
if (i != args.length - 1) {
sb.append(",");
}
}
String temp = sb.toString();
if (isNumberic) {
temp = temp.replace("'", "");
}
return temp;
}
/**
* 得到一个32位的UUID
*
* @return 32uuid
*/
public static String getUUID() {
UUID u = UUID.randomUUID();
return u.toString().replace("-", "");
}
/**
* 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为1,英文字符长度为0.5
* @param s
* @return
*/
public static double getLength(String s) {
double valueLength = 0;
String chinese = "[\u4e00-\u9fa5]";
// 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1
for (int i = 0; i < s.length(); i++) {
// 获取一个字符
String temp = s.substring(i, i + 1);
// 判断是否为中文字符
if (temp.matches(chinese)) {
// 中文字符长度为1
valueLength += 1;
} else {
// 其他字符长度为0.5
valueLength += 0.5;
}
}
//进位取整
return Math.ceil(valueLength);
}
/**
* 返回指定长度的字符串
* @param s
* @param length
* @param overflow 如果超出长度在后面追加指定的字符串
* @return
*/
public static String getLengthOfSub(String s,int length,String overflow) {
double valueLength = 0;
StringBuffer sb = new StringBuffer();
String chinese = "[\u4e00-\u9fa5]";
// 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1
for (int i = 0; i < s.length(); i++) {
// 获取一个字符
String temp = s.substring(i, i + 1);
// 判断是否为中文字符
if (temp.matches(chinese)) {
// 中文字符长度为1
valueLength += 1;
} else {
// 其他字符长度为0.5
valueLength += 0.5;
}
if (valueLength<=length) {
sb.append(temp);
}else{
if (null!=overflow&&!overflow.isEmpty()) {
sb.append(overflow);
}
break;
}
}
return sb.toString();
}
}