package com.helper;
import java.util.StringTokenizer;
public class StringHelper {
// ... 靜態工具方法
}
/** 將 null 或 "null" 轉為空字串,並去除首尾空白 */
public static final String convertStringNull(String strOrig) {
if (strOrig == null || "null".equals(strOrig)) return "";
return strOrig.trim();
}
/**
* @param strOrigin 原始字串
* @param separator 分隔符 (正則或字面)
* @return 非空項目陣列
*/
public static final String[] parserString(String strOrigin, String separator) {
if (strOrigin == null) return null;
StringTokenizer st = new StringTokenizer(strOrigin, separator);
String[] result = new String[st.countTokens()];
int idx = 0;
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (token != null && token.trim().length() > 0)
result[idx++] = token;
}
// 若有空項被跳過,需調整陣列大小 (略)
return result;
}
注意:StringTokenizer 將分隔符視為**單字元集合**,非完整字串。需多字元分隔符請用 split(regex) 或手寫解析。
/** 請求參數解碼:ISO-8859-1 → GBK */
public static String toChineseStr(String strOrigin) {
if (strOrigin == null || "null".equals(strOrigin)) return "";
try {
return new String(strOrigin.getBytes("ISO-8859-1"), "GBK");
} catch (Exception e) { return strOrigin; }
}
/** 輸出編碼:GBK → ISO-8859-1 */
public static String toStandardStr(String strOrigin) {
if (strOrigin == null || "null".equals(strOrigin)) return "";
try {
return new String(strOrigin.getBytes("GBK"), "ISO-8859-1");
} catch (Exception e) { return strOrigin; }
}
適用場景:Tomcat 預設以 ISO-8859-1 解碼 URL/表單參數,中文需手動轉碼。
public static String[] split(String s, String separatorSign) {
if (s == null) return null;
List indices = new ArrayList<>();
int idx = 0;
while ((idx = s.indexOf(separatorSign, idx)) >= 0) {
indices.add(idx);
idx += separatorSign.length();
}
if (indices.isEmpty()) return new String[]{s};
String[] result = new String[indices.size() + 1];
int start = 0;
for (int i = 0; i < indices.size(); i++) {
result[i] = s.substring(start, indices.get(i));
start = indices.get(i) + separatorSign.length();
}
result[result.length - 1] = s.substring(start);
return result;
}
/** null 或空字串 → */
public static final String filterNullStringToHtmlSpace(String strOrigin) {
if (strOrigin == null || strOrigin.length() == 0) return " ";
// 可擴展:轉義 < > & " 等防 XSS
return strOrigin;
}
| 需求 | 推薦方案 (JDK 8+) | 備註 |
|---|---|---|
| 分割字串 | str.split(regex), Pattern.splitAsStream() | 效能好、支援正則 |
| 連接字串 | String.join(), StringJoiner, Collectors.joining() | 線程安全、可讀性高 |
| 空值檢查 | Objects.requireNonNull(), Optional | 契約式設計 |
| 編碼轉換 | StandardCharsets.UTF_8, new String(bytes, charset) | 避免硬編碼字串 |
| HTML 轉義 | OWASP Java Encoder, Spring HtmlUtils.htmlEscape() | 防 XSS 完整方案 |
StringHelper 涵蓋了早期 Java 開發中高頻的字串處理需求。現代開發建議優先使用標準庫、Guava、Apache Commons Lang3 (StringUtils) 等成熟工具庫,減少自造輪子,專注業務邏輯。