字串工具類 StringUtil.java
阿新 • • 發佈:2019-02-20
/*
* @(#)StringUtil.java1.0 2005-10-19
*
* Copyright 2003 - 2006 BeanSoft Studio. All rights reserved.
*/
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.Date;
import beansoft.util.OS;
/**
* StringUtilExpress, 字串工具類, 一些方便的字串工具方法. 不包含 Servlet 處理工具.
* Used by Applet.
*
* Dependencies: None.
*
* @author beansoft
* @version 1.1 2005-10-19
*/
public class StringUtilExpress {
/**
* 獲取類路徑中的資原始檔的物理檔案路徑.
* NOTE: 僅在 Win32 平臺下測試通過開發.
* @date 2005.10.16
* @param resourcePath 資源路徑
* @return 配置檔案路徑
*/
public static String getRealFilePath(String resourcePath) {
java.net.URL inputURL = StringUtilExpress.class
.getResource(resourcePath);
String filePath = inputURL.getFile();
// For windows platform, the filePath will like this:
// /E:/Push/web/WEB-INF/classes/studio/beansoft/smtp/MailSender.ini
// So must remove the first /
if(OS.isWindows() && filePath.startsWith("/")) {
filePath = filePath.substring(1);
}
return filePath;
}
/**
* 將字串轉換為 int.
*
* @param input
* 輸入的字串
* @date 2005-07-29
* @return 結果數字
*/
public static int parseInt(String input) {
try {
return Integer.parseInt(input);
} catch (Exception e) {
// TODO: handle exception
}
return 0;
}
/**
* 格式化日期到日時分秒時間格式的顯示. d日 HH:mm:ss
*
* @return - String 格式化後的時間
*/
public static String formatDateToDHMSString(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"d日 HH:mm:ss");
return dateformat.format(date);
}
/**
* 格式化日期到時分秒時間格式的顯示.
*
* @return - String 格式化後的時間
*/
public static String formatDateToHMSString(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"HH:mm:ss");
return dateformat.format(date);
}
/**
* 將時分秒時間格式的字串轉換為日期.
*
* @param input
* @return
*/
public static Date parseHMSStringToDate(String input) {
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"HH:mm:ss");
try {
return dateformat.parse(input);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 格式化日期到 Mysql 資料庫日期格式字串的顯示.
*
* @return - String 格式化後的時間
*/
public static String formatDateToMysqlString(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyy-MM-dd HH:mm:ss");
return dateformat.format(date);
}
/**
* 將 Mysql 資料庫日期格式字串轉換為日期.
*
* @param input
* @return
*/
public static Date parseStringToMysqlDate(String input) {
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyy-MM-dd HH:mm:ss");
try {
return dateformat.parse(input);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 返回時間字串, 可讀形式的, M月d日 HH:mm 格式. 2004-09-22, LiuChangjiong
*
* @return - String 格式化後的時間
*/
public static String formatDateToMMddHHmm(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"M月d日 HH:mm");
return dateformat.format(date);
}
/**
* 返回時間字串, 可讀形式的, yy年M月d日HH:mm 格式. 2004-10-04, LiuChangjiong
*
* @return - String 格式化後的時間
*/
public static String formatDateToyyMMddHHmm(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yy年M月d日HH:mm");
return dateformat.format(date);
}
/**
* 生成一個 18 位的 yyyyMMddHHmmss.SSS 格式的日期字串.
*
* @param date
* Date
* @return String
*/
public static String genTimeStampString(Date date) {
java.text.SimpleDateformat df = new java.text.SimpleDateformat(
"yyyyMMddHHmmss.SSS");
return df.format(date);
}
/**
* 將字串 source 中的 oldStr 替換為 newStr, 並以大小寫敏感方式進行查詢
*
* @param source
* 需要替換的源字串
* @param oldStr
* 需要被替換的老字串
* @param newStr
* 替換為的新字串
*/
public static String replace(String source, String oldStr, String newStr) {
return replace(source, oldStr, newStr, true);
}
/**
* 將字串 source 中的 oldStr 替換為 newStr, matchCase 為是否設定大小寫敏感查詢
*
* @param source
* 需要替換的源字串
* @param oldStr
* 需要被替換的老字串
* @param newStr
* 替換為的新字串
* @param matchCase
* 是否需要按照大小寫敏感方式查詢
*/
public static String replace(String source, String oldStr, String newStr,
boolean matchCase) {
if (source == null) {
return null;
}
// 首先檢查舊字串是否存在, 不存在就不進行替換
if (source.toLowerCase().indexOf(oldStr.toLowerCase()) == -1) {
return source;
}
int findStartPos = 0;
int a = 0;
while (a > -1) {
int b = 0;
String str1, str2, str3, str4, strA, strB;
str1 = source;
str2 = str1.toLowerCase();
str3 = oldStr;
str4 = str3.toLowerCase();
if (matchCase) {
strA = str1;
strB = str3;
} else {
strA = str2;
strB = str4;
}
a = strA.indexOf(strB, findStartPos);
if (a > -1) {
b = oldStr.length();
findStartPos = a + b;
StringBuffer bbuf = new StringBuffer(source);
source = bbuf.replace(a, a + b, newStr) + "";
// 新的查詢開始點位於替換後的字串的結尾
findStartPos = findStartPos + newStr.length() - b;
}
}
return source;
}
/**
* 清除字串結尾的空格.
*
* @param input
* String 輸入的字串
* @return 轉換結果
*/
public static String trimTailSpaces(String input) {
if (isEmpty(input)) {
return "";
}
String trimedString = input.trim();
if (trimedString.length() == input.length()) {
return input;
}
return input.substring(0, input.indexOf(trimedString)
+ trimedString.length());
}
/**
* Change the null string value to "", if not null, then return it self, use
* this to avoid display a null string to "null".
*
* @param input
* the string to clear
* @return the result
*/
public static String clearNull(String input) {
return isEmpty(input) ? "" : input;
}
/**
* Return the limited length string of the input string (added at:April 10,
* 2004).
*
* @param input
* String
* @param maxLength
* int
* @return String processed result
*/
public static String limitStringLength(String input, int maxLength) {
if (isEmpty(input))
return "";
if (input.length() <= maxLength) {
return input;
} else {
return input.substring(0, maxLength - 3) + "...";
}
}
/**
* 將字串轉換為一個 javascript 的 alert 呼叫. eg: htmlAlert("What?"); returns
* <SCRIPT language="javascript">alert("What?")</SCRIPT>
*
* @param message
* 需要顯示的資訊
* @return 轉換結果
*/
public static String scriptAlert(String message) {
return "<SCRIPT language=/"javascript/">alert(/"" + message
+ "/");</SCRIPT>";
}
/**
* 將字串轉換為一個 javascript 的 document.location 改變呼叫. eg: htmlAlert("a.jsp");
* returns <SCRIPT
* language="javascript">document.location="a.jsp";</SCRIPT>
*
* @param url
* 需要顯示的 URL 字串
* @return 轉換結果
*/
public static String scriptRedirect(String url) {
return "<SCRIPT language=/"javascript/">document.location=/"" + url
+ "/";</SCRIPT>";
}
/**
* 返回指令碼語句 <SCRIPT language="javascript">history.back();</SCRIPT>
*
* @return 指令碼語句
*/
public static String scriptHistoryBack() {
return "<SCRIPT language=/"javascript/">history.back();</SCRIPT>";
}
/**
* 濾除帖子中的危險 HTML 程式碼, 主要是指令碼程式碼, 滾動字幕程式碼以及指令碼事件處理程式碼
*
* @param content
* 需要濾除的字串
* @return 過濾的結果
*/
public static String replaceHtmlCode(String content) {
if (isEmpty(content)) {
return "";
}
// 需要濾除的指令碼事件關鍵字
String[] eventKeywords = { "onmouseover", "onmouseout", "onmousedown",
"onmouseup", "onmousemove", "onclick", "ondblclick",
"onkeypress", "onkeydown", "onkeyup", "ondragstart",
"onerrorupdate", "onhelp", "onreadystatechange", "onrowenter",
"onrowexit", "onselectstart", "onload", "onunload",
"onbeforeunload", "onblur", "onerror", "onfocus", "onresize",
"onscroll", "oncontextmenu" };
content = replace(content, "<script", "<script", false);
content = replace(content, "</script", "</script", false);
content = replace(content, "<marquee", "<marquee", false);
content = replace(content, "</marquee", "</marquee", false);
content = replace(content, "/r/n", "<BR>");
// 濾除指令碼事件程式碼
for (int i = 0; i < eventKeywords.length; i++) {
content = replace(content, eventKeywords[i],
"_" + eventKeywords[i], false); // 新增一個"_", 使事件程式碼無效
}
return content;
}
/**
* 濾除 HTML 程式碼 為文字程式碼.
*/
public static String replaceHtmlToText(String input) {
if (isEmpty(input)) {
return "";
}
return setBr(setTag(input));
}
/**
* 濾除 HTML 標記.
* 因為 XML 中轉義字元依然有效, 因此把特殊字元過濾成中文的全形字元.
* @author beansoft
* @param s 輸入的字串
* @return 過濾後的字串
*/
public static String setTag(String s) {
int j = s.length();
StringBuffer stringbuffer = new StringBuffer(j + 500);
char ch;
for (int i = 0; i < j; i++) {
ch = s.charAt(i);
if (ch == '<') {
//stringbuffer.append("<");
stringbuffer.append("〈");
} else if (ch == '>') {
//stringbuffer.append(">");
stringbuffer.append("〉");
} else if (ch == '&') {
//stringbuffer.append("&");
stringbuffer.append("〃");
} else if (ch == '%') {
//stringbuffer.append("%%");
stringbuffer.append("※");
} else {
stringbuffer.append(ch);
}
}
return stringbuffer.toString();
}
/** 濾除 BR 程式碼 */
public static String setBr(String s) {
int j = s.length();
StringBuffer stringbuffer = new StringBuffer(j + 500);
for (int i = 0; i < j; i++) {
if (s.charAt(i) == '/n' || s.charAt(i) == '/r') {
continue;
} else {
stringbuffer.append(s.charAt(i));
}
}
return stringbuffer.toString();
}
/** 濾除空格 */
public static String setNbsp(String s) {
int j = s.length();
StringBuffer stringbuffer = new StringBuffer(j + 500);
for (int i = 0; i < j; i++) {
if (s.charAt(i) == ' ') {
stringbuffer.append(" ");
} else {
stringbuffer.append(s.charAt(i) + "");
}
}
return stringbuffer.toString();
}
/**
* 判斷字串是否全是數字字元.
*
* @param input
* 輸入的字串
* @return 判斷結果, true 為全數字, false 為還有非數字字元
*/
public static boolean isNumeric(String input) {
if (isEmpty(input)) {
return false;
}
for (int i = 0; i < input.length(); i++) {
char charAt = input.charAt(i);
if (!Character.isDigit(charAt)) {
return false;
}
}
return true;
}
/**
* 轉換由表單讀取的資料的內碼(從 ISO8859 轉換到 gb2312).
*
* @param input
* 輸入的字串
* @return 轉換結果, 如果有錯誤發生, 則返回原來的值
*/
public static String toChi(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, "GBK");
} catch (Exception ex) {
}
return input;
}
/**
* 轉換由表單讀取的資料的內碼到 ISO(從 GBK 轉換到ISO8859-1).
*
* @param input
* 輸入的字串
* @return 轉換結果, 如果有錯誤發生, 則返回原來的值
*/
public static String toISO(String input) {
return changeEncoding(input, "GBK", "ISO8859-1");
}
/**
* 轉換字串的內碼.
*
* @param input
* 輸入的字串
* @param sourceEncoding
* 源字符集名稱
* @param targetEncoding
* 目標字符集名稱
* @return 轉換結果, 如果有錯誤發生, 則返回原來的值
*/
public static String changeEncoding(String input, String sourceEncoding,
String targetEncoding) {
if (input == null || input.equals("")) {
return input;
}
try {
byte[] bytes = input.getBytes(sourceEncoding);
return new String(bytes, targetEncoding);
} catch (Exception ex) {
}
return input;
}
/**
* 將單個的 ' 換成 ''; SQL 規則:如果單引號中的字串包含一個嵌入的引號,可以使用兩個單引號表示嵌入的單引號.
*/
public static String replaceSql(String input) {
return replace(input, "'", "''");
}
/**
* 對給定字元進行 URL 編碼
*/
public static String encode(String value) {
if (isEmpty(value)) {
return "";
}
try {
value = java.net.URLEncoder.encode(value, "GB2312");
} catch (Exception ex) {
ex.printStackTrace();
}
return value;
}
/**
* 對給定字元進行 URL 解碼
*
* @param value
* 解碼前的字串
* @return 解碼後的字串
*/
public static String decode(String value) {
if (isEmpty(value)) {
return "";
}
try {
return java.net.URLDecoder.decode(value, "GB2312");
} catch (Exception ex) {
ex.printStackTrace();
}
return value;
}
/**
* 判斷字串是否未空, 如果為 null 或者長度為0, 均返回 true.
*/
public static boolean isEmpty(String input) {
return (input == null || input.length() == 0);
}
/**
* 獲得輸入字串的位元組長度(即二進位制位元組數), 用於傳送簡訊時判斷是否超出長度.
*
* @param input
* 輸入字串
* @return 字串的位元組長度(不是 Unicode 長度)
*/
public static int getBytesLength(String input) {
if (input == null) {
return 0;
}
int bytesLength = input.getBytes().length;
//System.out.println("bytes length is:" + bytesLength);
return bytesLength;
}
/**
* 檢驗字串是否未空, 如果是, 則返回給定的出錯資訊.
*
* @param input
* 輸入的字串
* @param errorMsg
* 出錯資訊
* @return 空串返回出錯資訊
*/
public static String isEmpty(String input, String errorMsg) {
if (isEmpty(input)) {
return errorMsg;
} else {
return "";
}
}
/**
* 得到檔案的副檔名.
*
* @param fileName
* 需要處理的檔案的名字.
* @return the extension portion of the file's name.
*/
public static String getExtension(String fileName) {
if (fileName != null) {
int i = fileName.lastIndexOf('.');
if (i > 0 && i < fileName.length() - 1) {
return fileName.substring(i + 1).toLowerCase();
}
}
return "";
}
/**
* 得到檔案的字首名.
* @date 2005-10-18
*
* @param fileName
* 需要處理的檔案的名字.
* @return the prefix portion of the file's name.
*/
public static String getPrefix(String fileName) {
if (fileName != null) {
fileName = fileName.replace('//', '/');
if(fileName.lastIndexOf("/") > 0) {
fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
}
int i = fileName.lastIndexOf('.');
if (i > 0 && i < fileName.length() - 1) {
return fileName.substring(0, i);
}
}
return "";
}
/**
* 得到檔案的短路徑, 不保護目錄.
* @date 2005-10-18
*
* @param fileName
* 需要處理的檔案的名字.
* @return the short version of the file's name.
*/
public static String getShortFileName(String fileName) {
if (fileName != null) {
fileName = fileName.replace('//', '/');
if(fileName.lastIndexOf("/") > 0) {
fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
}
return fileName;
}
return "";
}
/**
* Gets the absolute pathname of the class or resource file containing the
* specified class or resource name, as prescribed by the current classpath.
*
* @param resourceName
* Name of the class or resource name.
* @return the absolute pathname of the given resource
*/
public static String getPath(String resourceName) {
if (!resourceName.startsWith("/")) {
resourceName = "/" + resourceName;
}
//resourceName = resourceName.replace('.', '/');
java.net.URL classUrl = new StringUtilExpress().getClass().getResource(
resourceName);
if (classUrl != null) {
//System.out.println("/nClass '" + className +
//"' found in /n'" + classUrl.getFile() + "'");
//System.out.println("/n資源 '" + resourceName +
//"' 在檔案 /n'" + classUrl.getFile() + "' 中找到.");
return classUrl.getFile();
} else {
//System.out.println("/nClass '" + className +
//"' not found in /n'" +
//System.getProperty("java.class.path") + "'");
//System.out.println("/n資源 '" + resourceName +
//"' 沒有在類路徑 /n'" +
//System.getProperty("java.class.path") + "' 中找到");
return null;
}
}
/**
* 將日期轉換為中文表示方式的字串(格式為 yyyy年MM月dd日 HH:mm:ss).
*/
public static String dateToChineseString(Date date) {
if (date == null) {
return null;
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyy年MM月dd日 HH:mm:ss");
return dateformat.format(date);
}
/**
* 將日期轉換為 14 位的字串(格式為yyyyMMddHHmmss).
*/
public static String dateTo14String(Date date) {
if (date == null) {
return null;
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyyMMddHHmmss");
return dateformat.format(date);
}
/**
* 將 14 位的字串(格式為yyyyMMddHHmmss)轉換為日期.
*/
public static Date string14ToDate(String input) {
if (isEmpty(input)) {
return null;
}
if (input.length() != 14) {
return null;
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyyMMddHHmmss");
try {
return dateformat.parse(input);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* 將 TEXT 文字轉換為 HTML 程式碼, 已便於網頁正確的顯示出來.
*
* @param input
* 輸入的文字字串
* @return 轉換後的 HTML 程式碼
*/
public static String textToHtml(String input) {
if (isEmpty(input)) {
return "";
}
input = replace(input, "<", "<");
input = replace(input, ">", ">");
input = replace(input, "/n", "<br>/n");
input = replace(input, "/t", " ");
input = replace(input, " ", " ");
return input;
}
// Test only.
public static void main(String[] args) throws Exception {
//System.out.println(textToHtml("1<2/r/n<b>Bold</b>"));
//System.out.println(scriptAlert("oh!"));
//System.out.println(scriptRedirect(" http://localhost/"));
// System.out.println(StringUtil.getPath("/databaseconfig.properties"));
//java.io.File file = new java.io.File("e://Moblog//abcd//");
//
//file.mkdir();
Date time = (parseHMSStringToDate("12:23:00"));
System.out.println(time.toLocaleString());
Date nowTime = parseHMSStringToDate(formatDateToHMSString(new Date()));
System.out.println(nowTime.toLocaleString());
//GregorianCalendar cal = new GregorianCalendar();
//cal.setTime(new Date());
//cal.add(cal.YEAR, -cal.get(cal.YEAR) + 1970);
//cal.add(cal.MONTH, -cal.get(cal.MONTH));
//cal.add(cal.DATE, -cal.get(cal.DATE) + 1);
//
//System.out.println(cal.getTime().toLocaleString());
}
}
* @(#)StringUtil.java1.0 2005-10-19
*
* Copyright 2003 - 2006 BeanSoft Studio. All rights reserved.
*/
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.Date;
import beansoft.util.OS;
/**
* StringUtilExpress, 字串工具類, 一些方便的字串工具方法. 不包含 Servlet 處理工具.
* Used by Applet.
*
* Dependencies: None.
*
* @author beansoft
* @version 1.1 2005-10-19
*/
public class StringUtilExpress {
/**
* 獲取類路徑中的資原始檔的物理檔案路徑.
* NOTE: 僅在 Win32 平臺下測試通過開發.
* @date 2005.10.16
* @param resourcePath 資源路徑
* @return 配置檔案路徑
*/
public static String getRealFilePath(String resourcePath) {
java.net.URL inputURL = StringUtilExpress.class
.getResource(resourcePath);
String filePath = inputURL.getFile();
// For windows platform, the filePath will like this:
// /E:/Push/web/WEB-INF/classes/studio/beansoft/smtp/MailSender.ini
// So must remove the first /
if(OS.isWindows() && filePath.startsWith("/")) {
filePath = filePath.substring(1);
}
return filePath;
}
/**
* 將字串轉換為 int.
*
* @param input
* 輸入的字串
* @date 2005-07-29
* @return 結果數字
*/
public static int parseInt(String input) {
try {
return Integer.parseInt(input);
} catch (Exception e) {
// TODO: handle exception
}
return 0;
}
/**
* 格式化日期到日時分秒時間格式的顯示. d日 HH:mm:ss
*
* @return - String 格式化後的時間
*/
public static String formatDateToDHMSString(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"d日 HH:mm:ss");
return dateformat.format(date);
}
/**
* 格式化日期到時分秒時間格式的顯示.
*
* @return - String 格式化後的時間
*/
public static String formatDateToHMSString(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"HH:mm:ss");
return dateformat.format(date);
}
/**
* 將時分秒時間格式的字串轉換為日期.
*
* @param input
* @return
*/
public static Date parseHMSStringToDate(String input) {
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"HH:mm:ss");
try {
return dateformat.parse(input);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 格式化日期到 Mysql 資料庫日期格式字串的顯示.
*
* @return - String 格式化後的時間
*/
public static String formatDateToMysqlString(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyy-MM-dd HH:mm:ss");
return dateformat.format(date);
}
/**
* 將 Mysql 資料庫日期格式字串轉換為日期.
*
* @param input
* @return
*/
public static Date parseStringToMysqlDate(String input) {
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyy-MM-dd HH:mm:ss");
try {
return dateformat.parse(input);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 返回時間字串, 可讀形式的, M月d日 HH:mm 格式. 2004-09-22, LiuChangjiong
*
* @return - String 格式化後的時間
*/
public static String formatDateToMMddHHmm(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"M月d日 HH:mm");
return dateformat.format(date);
}
/**
* 返回時間字串, 可讀形式的, yy年M月d日HH:mm 格式. 2004-10-04, LiuChangjiong
*
* @return - String 格式化後的時間
*/
public static String formatDateToyyMMddHHmm(java.util.Date date) {
if (date == null) {
return "";
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yy年M月d日HH:mm");
return dateformat.format(date);
}
/**
* 生成一個 18 位的 yyyyMMddHHmmss.SSS 格式的日期字串.
*
* @param date
* Date
* @return String
*/
public static String genTimeStampString(Date date) {
java.text.SimpleDateformat df = new java.text.SimpleDateformat(
"yyyyMMddHHmmss.SSS");
return df.format(date);
}
/**
* 將字串 source 中的 oldStr 替換為 newStr, 並以大小寫敏感方式進行查詢
*
* @param source
* 需要替換的源字串
* @param oldStr
* 需要被替換的老字串
* @param newStr
* 替換為的新字串
*/
public static String replace(String source, String oldStr, String newStr) {
return replace(source, oldStr, newStr, true);
}
/**
* 將字串 source 中的 oldStr 替換為 newStr, matchCase 為是否設定大小寫敏感查詢
*
* @param source
* 需要替換的源字串
* @param oldStr
* 需要被替換的老字串
* @param newStr
* 替換為的新字串
* @param matchCase
* 是否需要按照大小寫敏感方式查詢
*/
public static String replace(String source, String oldStr, String newStr,
boolean matchCase) {
if (source == null) {
return null;
}
// 首先檢查舊字串是否存在, 不存在就不進行替換
if (source.toLowerCase().indexOf(oldStr.toLowerCase()) == -1) {
return source;
}
int findStartPos = 0;
int a = 0;
while (a > -1) {
int b = 0;
String str1, str2, str3, str4, strA, strB;
str1 = source;
str2 = str1.toLowerCase();
str3 = oldStr;
str4 = str3.toLowerCase();
if (matchCase) {
strA = str1;
strB = str3;
} else {
strA = str2;
strB = str4;
}
a = strA.indexOf(strB, findStartPos);
if (a > -1) {
b = oldStr.length();
findStartPos = a + b;
StringBuffer bbuf = new StringBuffer(source);
source = bbuf.replace(a, a + b, newStr) + "";
// 新的查詢開始點位於替換後的字串的結尾
findStartPos = findStartPos + newStr.length() - b;
}
}
return source;
}
/**
* 清除字串結尾的空格.
*
* @param input
* String 輸入的字串
* @return 轉換結果
*/
public static String trimTailSpaces(String input) {
if (isEmpty(input)) {
return "";
}
String trimedString = input.trim();
if (trimedString.length() == input.length()) {
return input;
}
return input.substring(0, input.indexOf(trimedString)
+ trimedString.length());
}
/**
* Change the null string value to "", if not null, then return it self, use
* this to avoid display a null string to "null".
*
* @param input
* the string to clear
* @return the result
*/
public static String clearNull(String input) {
return isEmpty(input) ? "" : input;
}
/**
* Return the limited length string of the input string (added at:April 10,
* 2004).
*
* @param input
* String
* @param maxLength
* int
* @return String processed result
*/
public static String limitStringLength(String input, int maxLength) {
if (isEmpty(input))
return "";
if (input.length() <= maxLength) {
return input;
} else {
return input.substring(0, maxLength - 3) + "...";
}
}
/**
* 將字串轉換為一個 javascript 的 alert 呼叫. eg: htmlAlert("What?"); returns
* <SCRIPT language="javascript">alert("What?")</SCRIPT>
*
* @param message
* 需要顯示的資訊
* @return 轉換結果
*/
public static String scriptAlert(String message) {
return "<SCRIPT language=/"javascript/">alert(/"" + message
+ "/");</SCRIPT>";
}
/**
* 將字串轉換為一個 javascript 的 document.location 改變呼叫. eg: htmlAlert("a.jsp");
* returns <SCRIPT
* language="javascript">document.location="a.jsp";</SCRIPT>
*
* @param url
* 需要顯示的 URL 字串
* @return 轉換結果
*/
public static String scriptRedirect(String url) {
return "<SCRIPT language=/"javascript/">document.location=/"" + url
+ "/";</SCRIPT>";
}
/**
* 返回指令碼語句 <SCRIPT language="javascript">history.back();</SCRIPT>
*
* @return 指令碼語句
*/
public static String scriptHistoryBack() {
return "<SCRIPT language=/"javascript/">history.back();</SCRIPT>";
}
/**
* 濾除帖子中的危險 HTML 程式碼, 主要是指令碼程式碼, 滾動字幕程式碼以及指令碼事件處理程式碼
*
* @param content
* 需要濾除的字串
* @return 過濾的結果
*/
public static String replaceHtmlCode(String content) {
if (isEmpty(content)) {
return "";
}
// 需要濾除的指令碼事件關鍵字
String[] eventKeywords = { "onmouseover", "onmouseout", "onmousedown",
"onmouseup", "onmousemove", "onclick", "ondblclick",
"onkeypress", "onkeydown", "onkeyup", "ondragstart",
"onerrorupdate", "onhelp", "onreadystatechange", "onrowenter",
"onrowexit", "onselectstart", "onload", "onunload",
"onbeforeunload", "onblur", "onerror", "onfocus", "onresize",
"onscroll", "oncontextmenu" };
content = replace(content, "<script", "<script", false);
content = replace(content, "</script", "</script", false);
content = replace(content, "<marquee", "<marquee", false);
content = replace(content, "</marquee", "</marquee", false);
content = replace(content, "/r/n", "<BR>");
// 濾除指令碼事件程式碼
for (int i = 0; i < eventKeywords.length; i++) {
content = replace(content, eventKeywords[i],
"_" + eventKeywords[i], false); // 新增一個"_", 使事件程式碼無效
}
return content;
}
/**
* 濾除 HTML 程式碼 為文字程式碼.
*/
public static String replaceHtmlToText(String input) {
if (isEmpty(input)) {
return "";
}
return setBr(setTag(input));
}
/**
* 濾除 HTML 標記.
* 因為 XML 中轉義字元依然有效, 因此把特殊字元過濾成中文的全形字元.
* @author beansoft
* @param s 輸入的字串
* @return 過濾後的字串
*/
public static String setTag(String s) {
int j = s.length();
StringBuffer stringbuffer = new StringBuffer(j + 500);
char ch;
for (int i = 0; i < j; i++) {
ch = s.charAt(i);
if (ch == '<') {
//stringbuffer.append("<");
stringbuffer.append("〈");
} else if (ch == '>') {
//stringbuffer.append(">");
stringbuffer.append("〉");
} else if (ch == '&') {
//stringbuffer.append("&");
stringbuffer.append("〃");
} else if (ch == '%') {
//stringbuffer.append("%%");
stringbuffer.append("※");
} else {
stringbuffer.append(ch);
}
}
return stringbuffer.toString();
}
/** 濾除 BR 程式碼 */
public static String setBr(String s) {
int j = s.length();
StringBuffer stringbuffer = new StringBuffer(j + 500);
for (int i = 0; i < j; i++) {
if (s.charAt(i) == '/n' || s.charAt(i) == '/r') {
continue;
} else {
stringbuffer.append(s.charAt(i));
}
}
return stringbuffer.toString();
}
/** 濾除空格 */
public static String setNbsp(String s) {
int j = s.length();
StringBuffer stringbuffer = new StringBuffer(j + 500);
for (int i = 0; i < j; i++) {
if (s.charAt(i) == ' ') {
stringbuffer.append(" ");
} else {
stringbuffer.append(s.charAt(i) + "");
}
}
return stringbuffer.toString();
}
/**
* 判斷字串是否全是數字字元.
*
* @param input
* 輸入的字串
* @return 判斷結果, true 為全數字, false 為還有非數字字元
*/
public static boolean isNumeric(String input) {
if (isEmpty(input)) {
return false;
}
for (int i = 0; i < input.length(); i++) {
char charAt = input.charAt(i);
if (!Character.isDigit(charAt)) {
return false;
}
}
return true;
}
/**
* 轉換由表單讀取的資料的內碼(從 ISO8859 轉換到 gb2312).
*
* @param input
* 輸入的字串
* @return 轉換結果, 如果有錯誤發生, 則返回原來的值
*/
public static String toChi(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, "GBK");
} catch (Exception ex) {
}
return input;
}
/**
* 轉換由表單讀取的資料的內碼到 ISO(從 GBK 轉換到ISO8859-1).
*
* @param input
* 輸入的字串
* @return 轉換結果, 如果有錯誤發生, 則返回原來的值
*/
public static String toISO(String input) {
return changeEncoding(input, "GBK", "ISO8859-1");
}
/**
* 轉換字串的內碼.
*
* @param input
* 輸入的字串
* @param sourceEncoding
* 源字符集名稱
* @param targetEncoding
* 目標字符集名稱
* @return 轉換結果, 如果有錯誤發生, 則返回原來的值
*/
public static String changeEncoding(String input, String sourceEncoding,
String targetEncoding) {
if (input == null || input.equals("")) {
return input;
}
try {
byte[] bytes = input.getBytes(sourceEncoding);
return new String(bytes, targetEncoding);
} catch (Exception ex) {
}
return input;
}
/**
* 將單個的 ' 換成 ''; SQL 規則:如果單引號中的字串包含一個嵌入的引號,可以使用兩個單引號表示嵌入的單引號.
*/
public static String replaceSql(String input) {
return replace(input, "'", "''");
}
/**
* 對給定字元進行 URL 編碼
*/
public static String encode(String value) {
if (isEmpty(value)) {
return "";
}
try {
value = java.net.URLEncoder.encode(value, "GB2312");
} catch (Exception ex) {
ex.printStackTrace();
}
return value;
}
/**
* 對給定字元進行 URL 解碼
*
* @param value
* 解碼前的字串
* @return 解碼後的字串
*/
public static String decode(String value) {
if (isEmpty(value)) {
return "";
}
try {
return java.net.URLDecoder.decode(value, "GB2312");
} catch (Exception ex) {
ex.printStackTrace();
}
return value;
}
/**
* 判斷字串是否未空, 如果為 null 或者長度為0, 均返回 true.
*/
public static boolean isEmpty(String input) {
return (input == null || input.length() == 0);
}
/**
* 獲得輸入字串的位元組長度(即二進位制位元組數), 用於傳送簡訊時判斷是否超出長度.
*
* @param input
* 輸入字串
* @return 字串的位元組長度(不是 Unicode 長度)
*/
public static int getBytesLength(String input) {
if (input == null) {
return 0;
}
int bytesLength = input.getBytes().length;
//System.out.println("bytes length is:" + bytesLength);
return bytesLength;
}
/**
* 檢驗字串是否未空, 如果是, 則返回給定的出錯資訊.
*
* @param input
* 輸入的字串
* @param errorMsg
* 出錯資訊
* @return 空串返回出錯資訊
*/
public static String isEmpty(String input, String errorMsg) {
if (isEmpty(input)) {
return errorMsg;
} else {
return "";
}
}
/**
* 得到檔案的副檔名.
*
* @param fileName
* 需要處理的檔案的名字.
* @return the extension portion of the file's name.
*/
public static String getExtension(String fileName) {
if (fileName != null) {
int i = fileName.lastIndexOf('.');
if (i > 0 && i < fileName.length() - 1) {
return fileName.substring(i + 1).toLowerCase();
}
}
return "";
}
/**
* 得到檔案的字首名.
* @date 2005-10-18
*
* @param fileName
* 需要處理的檔案的名字.
* @return the prefix portion of the file's name.
*/
public static String getPrefix(String fileName) {
if (fileName != null) {
fileName = fileName.replace('//', '/');
if(fileName.lastIndexOf("/") > 0) {
fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
}
int i = fileName.lastIndexOf('.');
if (i > 0 && i < fileName.length() - 1) {
return fileName.substring(0, i);
}
}
return "";
}
/**
* 得到檔案的短路徑, 不保護目錄.
* @date 2005-10-18
*
* @param fileName
* 需要處理的檔案的名字.
* @return the short version of the file's name.
*/
public static String getShortFileName(String fileName) {
if (fileName != null) {
fileName = fileName.replace('//', '/');
if(fileName.lastIndexOf("/") > 0) {
fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
}
return fileName;
}
return "";
}
/**
* Gets the absolute pathname of the class or resource file containing the
* specified class or resource name, as prescribed by the current classpath.
*
* @param resourceName
* Name of the class or resource name.
* @return the absolute pathname of the given resource
*/
public static String getPath(String resourceName) {
if (!resourceName.startsWith("/")) {
resourceName = "/" + resourceName;
}
//resourceName = resourceName.replace('.', '/');
java.net.URL classUrl = new StringUtilExpress().getClass().getResource(
resourceName);
if (classUrl != null) {
//System.out.println("/nClass '" + className +
//"' found in /n'" + classUrl.getFile() + "'");
//System.out.println("/n資源 '" + resourceName +
//"' 在檔案 /n'" + classUrl.getFile() + "' 中找到.");
return classUrl.getFile();
} else {
//System.out.println("/nClass '" + className +
//"' not found in /n'" +
//System.getProperty("java.class.path") + "'");
//System.out.println("/n資源 '" + resourceName +
//"' 沒有在類路徑 /n'" +
//System.getProperty("java.class.path") + "' 中找到");
return null;
}
}
/**
* 將日期轉換為中文表示方式的字串(格式為 yyyy年MM月dd日 HH:mm:ss).
*/
public static String dateToChineseString(Date date) {
if (date == null) {
return null;
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyy年MM月dd日 HH:mm:ss");
return dateformat.format(date);
}
/**
* 將日期轉換為 14 位的字串(格式為yyyyMMddHHmmss).
*/
public static String dateTo14String(Date date) {
if (date == null) {
return null;
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyyMMddHHmmss");
return dateformat.format(date);
}
/**
* 將 14 位的字串(格式為yyyyMMddHHmmss)轉換為日期.
*/
public static Date string14ToDate(String input) {
if (isEmpty(input)) {
return null;
}
if (input.length() != 14) {
return null;
}
java.text.SimpleDateformat dateformat = new java.text.SimpleDateformat(
"yyyyMMddHHmmss");
try {
return dateformat.parse(input);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* 將 TEXT 文字轉換為 HTML 程式碼, 已便於網頁正確的顯示出來.
*
* @param input
* 輸入的文字字串
* @return 轉換後的 HTML 程式碼
*/
public static String textToHtml(String input) {
if (isEmpty(input)) {
return "";
}
input = replace(input, "<", "<");
input = replace(input, ">", ">");
input = replace(input, "/n", "<br>/n");
input = replace(input, "/t", " ");
input = replace(input, " ", " ");
return input;
}
// Test only.
public static void main(String[] args) throws Exception {
//System.out.println(textToHtml("1<2/r/n<b>Bold</b>"));
//System.out.println(scriptAlert("oh!"));
//System.out.println(scriptRedirect("
// System.out.println(StringUtil.getPath("/databaseconfig.properties"));
//java.io.File file = new java.io.File("e://Moblog//abcd//");
//
//file.mkdir();
Date time = (parseHMSStringToDate("12:23:00"));
System.out.println(time.toLocaleString());
Date nowTime = parseHMSStringToDate(formatDateToHMSString(new Date()));
System.out.println(nowTime.toLocaleString());
//GregorianCalendar cal = new GregorianCalendar();
//cal.setTime(new Date());
//cal.add(cal.YEAR, -cal.get(cal.YEAR) + 1970);
//cal.add(cal.MONTH, -cal.get(cal.MONTH));
//cal.add(cal.DATE, -cal.get(cal.DATE) + 1);
//
//System.out.println(cal.getTime().toLocaleString());
}
}