1. 程式人生 > >字符串處理工具StringUtils

字符串處理工具StringUtils

sel 非法字符 class random 長度 source bre 成功 字符串

package yqw.java.util;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtils {

private static final Pattern validNumber = Pattern.compile("^[\\d\\.]+$|^0x[\\dA-Fa-f]+$");
private static final Pattern validStr = Pattern.compile("[\\w\\d\\u4E00-\\u9FA5]+");
private static final Pattern valueTypePat = Pattern.compile("(\\d+\\.?\\d*)([ilfdD])");
private static final Pattern validPhone = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
private static final Pattern validEmail = Pattern.compile("^([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)*"
+ "@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+[\\.][A-Za-z]{2,3}([\\.][A-Za-z]{2})?$");
private static char punct[] = { ‘,‘, ‘.‘, ‘!‘, ‘?‘, ‘;‘, ‘:‘, ‘,‘, ‘。‘, ‘!‘, ‘?‘, ‘;‘, ‘:‘, ‘、‘ };

/**
* 驗證郵箱
*
* @param email
* @return
*/

public static boolean checkEmail(String email) {
boolean flag = false;
try {
String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern regex = Pattern.compile(check);
Matcher matcher = regex.matcher(email);
flag = matcher.matches();
} catch (Exception e) {
flag = false;
}
return flag;
}

/**
* 驗證手機號碼,11位數字,1開通,第二位數必須是3456789這些數字之一 *
*
* @param mobileNumber
* @return
*/
public static boolean checkMobileNumber(String mobileNumber) {
boolean flag = false;
try {
// Pattern regex =
// Pattern.compile("^(((13[0-9])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$");
Pattern regex = Pattern.compile("^1[345789]\\d{9}$");
Matcher matcher = regex.matcher(mobileNumber);
flag = matcher.matches();
} catch (Exception e) {
e.printStackTrace();
flag = false;

}
return flag;
}


/**
* 將字符串中的標點符號過濾掉
*
* @param str
* @return
*/
public static String TrimPunctuation(String str) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < str.length(); ++i) {
boolean need_filter = false;
for (int j = 0; j < punct.length; ++j) {
if (punct[j] == str.charAt(i)) {
need_filter = true;
break;
}
}

if (!need_filter) {
result.append(str.charAt(i));
}
}

return result.toString();
}

/**
* 判斷是否包含標點
*/
public static boolean ContainsPunctuation(String str) {
for (int i = 0; i < str.length(); ++i) {
for (int j = 0; j < punct.length; ++j) {
if (punct[j] == str.charAt(i)) {
return true;
}
}
}

return false;
}

// 將日期簡單格式化
public static String FormatDateInFormat(Date date, String format) {
SimpleDateFormat fmt = new SimpleDateFormat(format);
return fmt.format(date);
}

public static String FormatDateTime(Date date) {
return FormatDateInFormat(date, "yyyy-MM-dd HH:mm:ss");
}

public static String FormatDateTime(Calendar date) {
return FormatDateTime(date.getTime());
}

public static String FormatDate(Date date) {
return FormatDateInFormat(date, "yyyy-MM-dd");
}

public static String FormatDateForQuery(Date date) {
return FormatDateInFormat(date, "yyyyMMdd");
}

public static String FormatDate(Calendar date) {
return FormatDateInFormat(date.getTime(), "yyyy-MM-dd");
}

public static String CalendarToString(Calendar date) {
return FormatDateInFormat(date.getTime(), "yyyy-MM-dd");
}

/**
* 將時間字符串解析為calendar
*/
public static Calendar StringToCalender(String str_date) {
Date date = StringToDate(str_date);
Calendar cal = new GregorianCalendar();
cal.setTime(date);
return cal;
}

/**
* 使用指定日期格式解析日期字符串
*
* @param dateStr
* 日期字符串
* @param dateFormat
* 日期格式,SimpleDateFormat能夠識別的格式
* @return 成功返回Date,失敗返回null
*/
public static Date StringToDateInFormat(String dateStr, String dateFormat) {
SimpleDateFormat fmt = new SimpleDateFormat(dateFormat);
try {
return fmt.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}

public static Date StringToDate(String date) {
return StringToDateInFormat(date, "yyyy-MM-dd");
}

public static Date StringToDateInQuery(String date) {
return StringToDateInFormat(date, "yyyyMMdd");
}

// 將時長格式化為時分秒的樣式
public static String FormatTimeDuration(int sec) {
return String.format("%02d:%02d", sec / 60, sec % 60);
}

// 對字符串數組進行trim
public static String[] TrimStringArray(String[] arr) {
assert (arr != null);
Vector<String> lst = new Vector<String>();
for (int i = 0; i < arr.length; ++i) {
String item = arr[i];
item.trim();
if (!item.isEmpty())
lst.add(item);
}

if (lst.size() == 0) {
return null;
} else {
String[] str_arr = new String[lst.size()];
for (int i = 0; i < lst.size(); ++i) {
str_arr[i] = lst.get(i);
}
return str_arr;
}
}

// 對get方式過來的中文參數的亂碼進行轉碼
public static String StringToUTF8(String param) throws Exception {
return new String(param.getBytes("ISO-8859-1"), "UTF-8");
}

// 判斷字符串是否為空
// 包括是否為null,是否為空字符串,過濾完空格後是否為空字符串
public static boolean IsAbsEmpty(final String str) {
if (str == null) {
return true;
} else {
return str.trim().isEmpty();
}
}

// 判斷字符串是否為空
// 包括是否為null,是否為空字符串,過濾完空格後是否為空字符串
public static boolean IsAbsEmpty(final StringBuffer str) {
if (str == null) {
return true;
} else {
return IsAbsEmpty(str.toString());
}
}

// 判斷字符串是否為空
// 包括是否為null,是否為空字符串,過濾完空格後是否為空字符串
public static boolean IsAbsEmpty(final StringBuilder str) {
if (str == null) {
return true;
} else {
return IsAbsEmpty(str.toString());
}
}

/**
* 將字符串值轉換為指定類型
*
* @param val
* 字符串字面值
* @param type
* 目標類型 支持包括int, long, date, string, float, double
* @return 轉換後的對象
*/
public static Object ConvertToType(String val, String type) {
Matcher mat = valueTypePat.matcher(val);
boolean matRet = mat.matches();
if (matRet) {
val = mat.group(1);
}

try {
if (type.matches("i|int")) {
return Integer.valueOf(val);
} else if (type.matches("l|long")) {
return Long.valueOf(val);
} else if (type.matches("s|string")) {
return val;
} else if (type.matches("f|float")) {
return Float.valueOf(val);
} else if (type.matches("d|double")) {
return Double.valueOf(val);
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public static String ToShortType(String type) {
if (type.matches("i|int")) {
return "i";
} else if (type.matches("l|long")) {
return "l";
} else if (type.matches("s|string")) {
return "";
} else if (type.matches("f|float")) {
return "f";
} else if (type.matches("d|double")) {
return "d";
} else if (type.matches("D|date")) {
return "D";
} else {
return null;
}
}

/**
* 通過後綴表示類型,進行轉換 後綴類型,包括i,l,f,d,D
*/
public static Object ConvertToType(String val) {
Matcher mat = valueTypePat.matcher(val);
boolean matRet = mat.matches();

if (!matRet) {
// 沒匹配則之間返回原始字符串
return val;
}

try {
String type = mat.group(2);
String value = mat.group(1);

if (type.equals("i")) {
return Integer.valueOf(value);
} else if (type.equals("l")) {
return Long.valueOf(value);
} else if (type.equals("f")) {
return Float.valueOf(value);
} else if (type.equals("d")) {
return Double.valueOf(value);
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

/**
* 根據後綴判斷類型
*/
public static String DetectType(String val) {
Matcher mat = valueTypePat.matcher(val);
boolean matRet = mat.matches();
if (!matRet)
return null;

return mat.group(2);
}

/**
* 從字符串形式的年-月-日中提取出 年-月
*
* @param fileDate
* 原始日期字符串
* @return 返回的年-月字符串
*/
public static String ExtractMonth(String fileDate) {
String[] date = fileDate.split("-");
assert date.length >= 3;
return date[0] + "-" + date[1];
}

public static String ExtractMonth(Calendar date) {
return String.format("%4d-%02d", date.get(Calendar.YEAR), date.get(Calendar.MONTH));
}

/**
* 從字符串中解析出列表,分隔符支持;,: 該方法會將空節點剔除掉
*
* @param str
* 字符串
* @return 解析後的列表
*/
public static List<String> ParseList(String str) {
final String splitter = "[;,:]";
return ParseList(splitter);
}

public static List<String> ParseList(String str, String splitter, boolean trimEmpty) {
List<String> lst = new Vector<String>();
String[] splits = str.split(splitter, -1);
for (String item : splits) {
if (trimEmpty && IsAbsEmpty(item))
continue;
lst.add(item);
}

return lst;
}

/**
* 將字符串列表,使用分號分割
*
* @param lst
* 字符串列表
* @return 返回整合後的字符串
*/
public static String CollectionToStringWithSemicolon(Collection<? extends Object> lst) {
StringBuilder str = new StringBuilder();
for (Object item : lst) {
str.append(item.toString()).append(";");
}
if (str.length() > 0)
str.deleteCharAt(str.length() - 1);
return str.toString();
}

/**
* 從字符串中解析出map key和value之間使用:分割,節點之間使用;分割
*
* @param str
* 原始字符串
* @return 解析後的map
*/
public static Map<String, String> ParseMap(String str) {
return ParseMap(str, ";", ":");
}

/**
* 從字符串中解析出map 可指定分割符
*/
public static Map<String, String> ParseMap(String str, String item_split, String kv_split) {
String[] splits = str.split(item_split);
Map<String, String> map = new HashMap<String, String>();
for (String item : splits) {
String[] key_val = item.split(kv_split);
if (key_val.length == 1) {
map.put(key_val[0], "");
} else if (key_val.length >= 2) {
map.put(key_val[0].trim(), key_val[1].trim());
}
}
return map;
}

/**
* 從字符串中解析出map key和value之間使用:分割,節點之間使用;分割
*
* @param str
* 原始字符串
* @return 解析後的map
*/
public static Map<String, Integer> ParseIntegerMap(String str) {
String[] splits = str.split("[;,]");
Map<String, Integer> map = new HashMap<String, Integer>();
for (String item : splits) {
String[] key_val = item.trim().split(":");
if (key_val.length != 2)
continue;

map.put(key_val[0].trim(), Integer.valueOf(key_val[1].trim()));
}
return map;
}

/**
* 將map對象轉為字符串,節點之間使用;,key val之間使用:
*/
public static String MapToStringWithSemicolon(Map<String, ? extends Object> map) {
return MapToString(map, ";", ":");
}

/**
* 將map轉換為字符串,分隔符可指定
*
* @param item_split
* 節點之間的字符串
* @param kv_split
* 鍵值對質檢的字符串
*/
public static String MapToString(Map<String, ? extends Object> map, String item_split, String kv_split) {
StringBuilder str = new StringBuilder();
for (Map.Entry<String, ? extends Object> item : map.entrySet()) {
str.append(item.getKey()).append(kv_split).append(item.getValue()).append(item_split);
}
if (str.length() > 0)
str.deleteCharAt(str.length() - 1);
return str.toString();
}

/**
* 用於將兩條存在一一對應關系的字符串,解析為map
*/
public static Map<String, Integer> ParseIntegerMapFromPairString(String str_key, String str_val) {
List<String> key_lst = ParseList(str_key);
List<String> val_lst = ParseList(str_val);
if (key_lst.size() != val_lst.size())
return null;

Map<String, Integer> final_map = new HashMap<String, Integer>();
for (int i = 0; i < key_lst.size(); ++i) {
final_map.put(key_lst.get(i), Integer.valueOf(val_lst.get(i)));
}
return final_map;
}

public static List<Integer> ParseIntegerList(String str) {
List<String> lst = ParseList(str);
List<Integer> int_lst = new ArrayList<Integer>();
for (String item : lst) {
int_lst.add(Integer.valueOf(item));
}

return int_lst;
}

/**
* 使用指定的分隔符合並兩個字符串 分隔符會和第一個字符串末尾、第二個字符串的開頭出現的對應字符進行合並
*
* @param one
* 第一個字符串
* @param two
* 第二個字符串
* @param splitter
* 分隔符
* @return 合並後的字符串
*/
public static String CombineWithSplitter(String one, String two, String splitter) {
StringBuilder finalStr = new StringBuilder();
int splitterPos = one.lastIndexOf(splitter);
if ((splitterPos != -1) && (splitterPos + splitter.length() == (one.length()))) {
finalStr.append(one.substring(0, splitterPos));
} else {
finalStr.append(one);
}

if (finalStr.length() > 0)
finalStr.append(splitter);

splitterPos = two.indexOf(splitter);
if (splitterPos == 0) {
finalStr.append(two.substring(splitterPos + splitter.length()));
} else {
finalStr.append(two);
}

return finalStr.toString();
}

/**
* 前綴補充
*
* @param prefix
* 前綴字符串
* @param str
* 原始字符串
* @return 補充哦功能後的字符串
*/
public static String PrependPrefix(String prefix, String str) {
return prefix + str;
}

/**
* 刪除前綴
*/
public static String RemovePrefix(String prefix, String str) {
int index = str.indexOf(prefix);
if (index != 0) {
return str.substring(index + prefix.length());
} else {
return str;
}
}

/**
* 生成固定長度的隨即字符串
*
* @param length
* 字符串長度
*/
public static String RandomString(int length) {
StringBuilder str = new StringBuilder();
for (int i = 0; i < length; ++i) {
str.append((char) (‘A‘ + (int) (Math.random() * 26)));
}

return str.toString();
}

/**
* 判斷是否包含非法字符、特殊字符
*/
public static boolean IsValidChar(String str) {
return validStr.matcher(str).matches();
}

/**
* 路徑統一格式化
*/
public static String NormalizePath(String path) {
return path.replace("\\", "/");
}

/**
* 獲取文件不帶擴展名的路徑
*
* @param source
* 文件路徑
* @return 文件名
*/
public static String GetFileNameWithoutExt(String source) {
String fileName = new File(source).getName();
int pos = fileName.indexOf(".");
if (pos == -1) {
return fileName;
} else {
return fileName.substring(0, pos);
}
}

/**
* 判斷字符串是否是數字
*
* @param input
* 字符串
*/
public static boolean IsValidInteger(String input) {
try {
Integer.valueOf(input);
return true;
} catch (NumberFormatException e) {
return false;
}
}

/**
* 判斷字符串是否是浮點型數字
*
* @param input
* 字符串
*/
public static boolean IsValidFloat(String input) {
try {
Float.valueOf(input);
return true;
} catch (NumberFormatException e) {
return false;
}
}

/**
* 驗證郵箱格式是否合法
*
* @param email
* 郵箱名
* @return 是否合法
*/
public static boolean IsValidEmail(String email) {
return validEmail.matcher(email).matches();
}

/**
* 驗證手機號是否合法
*
* @param phone
* 手機號
* @return 是否合法
*/
public static boolean IsValidPhone(String phone) {
return validPhone.matcher(phone).matches();
}

/**
* 生成組合路徑
*
* @param base
* 父目錄
* @param sub
* 子路徑
*/
public static String CombinePath(String base, String sub) {
// 如果是根目錄,直接合並
if (base.equals("/")) {
return base + sub;
}
return CombineWithSplitter(base, sub, "/");
}

/**
* 全角轉半角
*
* @param str
* 字符串
*/
public static String FullToHalf(String str) {
StringBuffer sb = new StringBuffer();
try {
for (int i = 0; i < str.length(); i++) {
if (str.substring(i, i + 1).equals(" ") || str.substring(i, i + 1).equals(" ")) {
sb.append(" ");
continue;
}
byte[] temp = str.substring(i, i + 1).getBytes("unicode");
if (temp[2] == -1) {
temp[3] = (byte) (temp[3] + 32);
temp[2] = 0;
}
sb.append(new String(temp, "unicode"));
}
} catch (Exception e) {
}
return sb.toString();
}

/**
* 小數轉百分數
*/
public static String DecimalToPercent(double num) {
return String.format("%.2f", (double) (Math.round(num * 10000) / 100.f));
}

/**
* 生成唯一令牌
*/
public static String UUID() {
return UUID.randomUUID().toString();
}

/**
* 清理掉前後的空白字符
*/
public static Object TrimBlank(String version) {
return version.replaceAll("^\\s+|\\s+$", "");
}

public static boolean IsTrue(String value) {
return value.toLowerCase().matches("1|true");
}

public static boolean IsFalse(String value) {
return value.toLowerCase().matches("0|false");
}

/**
* 判斷str是否匹配regExp正則表達式
*
* @param regExp
* 正則表達式
* @param str
* 字符串
* @return 是否匹配
*/
public static boolean IsMatch(String regExp, String str) {
Pattern pattern = Pattern.compile(regExp);
Matcher mat = pattern.matcher(str);
return mat.matches();
}

}

字符串處理工具StringUtils