首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

高品質 Java 程式碼建議 56-59:字串拼接、正則、編碼與排序

     編輯:Java 綜合教學

高品質 Java 程式碼建議 56-59:字串拼接、正則、編碼與排序

續接上篇,本文涵蓋字串拼接效能選擇、複雜字串操作用正則、統一 UTF-8 編碼、中文排序邊界處理四大實戰建議。

建議 56:自由選擇字串拼接方式,但要懂效能差異

測試 10 萬次迴圈拼接單字元:

方式耗時原理
StringBuilder.append()~1 ms單一陣列擴容,無中間物件
StringBuffer.append()~2 ms同步鎖開銷
String.concat()~150 ms每次建立新 char[] 與 String 物件
+ 操作符~500 ms每次隱建 StringBuilder 並 toString()

結論:

  • 單執行緒大量拼接 → StringBuilder
  • 多執行緒 → StringBuffer
  • 簡單少量拼接 → + 可讀性最佳,編譯器優化足夠
  • 效能敏感熱點 → 避免 + 與 concat()

建議 57:複雜字串操作推薦使用正則表達式

需求:統計文章英文單字數。split(" ") 失敗於連續空格、標點、連字符。
正則 \\b\\w+\\b(單字邊界 + 單字字元)精準匹配:

Pattern p = Pattern.compile("\\b\\w+\\b");
Matcher m = p.matcher(text);
int count = 0;
while (m.find()) count++;

注意:正則威力大但可讀性差,複雜正則務必加註解或提取為常數。

建議 58:強烈建議全系統統一使用 UTF-8 編碼

亂碼根因:編碼不一致。Java 內部用 UTF-16,.class 檔為 UTF-8,但原始碼檔、資料庫、網路傳輸、作業系統預設編碼可能不同(GBK、Big5、ISO-8859-1)。

最佳實踐:

  1. IDE 專案編碼設為 UTF-8(Eclipse: Properties → Resource → Text file encoding)。
  2. 編譯指定 javac -encoding UTF-8 或 Maven <encoding>UTF-8</encoding>。
  3. 資料庫連線 URL 加 characterEncoding=utf8,表建立 CHARSET=utf8mb4。
  4. HTTP 請求/回應 Header 設 Content-Type: application/json; charset=UTF-8。
  5. 程式碼中明確指定編碼:new String(bytes, StandardCharsets.UTF_8),避免依賴平台預設值。

建議 59:對字串排序持寬容態度,預期用 Collator

String.compareTo() 按 Unicode 碼點比較,「張」(U+5F20) < 「李」(U+674E),不符拼音順序。
使用 Collator.getInstance(Locale.CHINA) 依語言規則排序:

String[] names = {"張三", "李四", "王五"};
Arrays.sort(names, Collator.getInstance(Locale.CHINA));
// 結果:李四、王五、張三

限制:罕見字、多音字、造字(如「犇」「鑫」「淼」)可能仍排序錯誤,因 Unicode 排序非拼音順序。嚴格需求可用 pinyin4j 轉拼音後自訂比較器,但需處理同音字、多音字複雜度。

建議:非關鍵業務用 Collator 即可;關鍵業務投入專用拼音排序庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved