本文整理自實務專案經驗,提供一個功能完整的 StringUtil 類別,涵蓋字串替換、智慧分割、全半角互轉等高頻操作,程式碼可直接落地專案。
replaceStr標準 String.replace() 在某些舊版 JVM 行為不一,此處採用遞迴實作確保相容性:
public static String replaceStr(String source, String beRepStr, String repStr, String returnStr) {
if (source.indexOf(beRepStr) < 0) return source;
String head = source.substring(0, source.indexOf(beRepStr));
String body = repStr + source.substring(source.indexOf(beRepStr) + beRepStr.length());
return replaceStr(head + body, beRepStr, repStr, returnStr);
}
若來源字串不含目標子串,直接回傳原字串;否則切出頭段與尾段,替換後遞迴處理剩餘部分。
getFields自動偵測分隔符:預設空白鍵 \u0020,若發現 # 且位置在空白鍵之前,則改用 # 分割:
public static String[] getFields(String test, String sep) {
sep = "\u0020";
if (test.indexOf(sep) != -1) {
if ((test.indexOf(sep) > test.indexOf("#")) && test.indexOf("#") != -1) sep = "#";
} else { sep = "#"; }
List flds = new ArrayList();
if (sep.equals("\u0020")) {
StringTokenizer st = new StringTokenizer(test.trim(), sep);
while (st.hasMoreTokens()) flds.add(st.nextToken());
return (String[]) flds.toArray(new String[st.countTokens()]);
} else {
return test.trim().split(sep);
}
}
回傳 String[],相容舊版 StringTokenizer 與新版 split()。
BQchange / QBchange利用 Unicode 碼位偏移量 65248 (0xFF00) 實作:
public static final String BQchange(String QJstr) { /* 半形轉全形 */ }
public static final String QBchange(String QJstr) { /* 全形轉半形 */ }
主程式示範:
String bj = "#@$%^&*()";
String qj = "#?¥%……?*()";
System.out.println("半角轉全角:" + bj + " --> " + BQchange(bj));
System.out.println("全角轉半角:" + qj + " --> " + QBchange(qj));
原始碼中保留以 charCodeAt 計算偏移的 JavaScript 風格實作,供參考。