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

J2ME 字串分割實作:相容 MIDP 1.0/2.0 的 split() 替代方案

     編輯:J2ME

背景

JDK 1.4+ 提供 String.split(regex),但 MIDP 1.0/2.0 皆未包含此方法。自行實作輕量級分割工具,支援任意分隔字串(非正則),效能足夠應付 J2ME 典型場景(解析 CSV、協定封包、設定檔)。

演算法邏輯

  1. 用 indexOf(separator) 尋找分隔字串位置。
  2. 以 substring(start, found) 取得子字串存入 Vector。
  3. 更新 start = found + separator.length() 繼續搜尋。
  4. 迴圈結束後補上最後一段。
  5. 將 Vector 轉為 String[] 回傳。

完整實作

public static String[] split(String original, String separator) {
    if (original == null || separator == null || separator.length() == 0)
        return new String[] { original }; // 防呆

    Vector v = new Vector();
    int start = 0;
    int pos;
    while ((pos = original.indexOf(separator, start)) != -1) {
        v.addElement(original.substring(start, pos));
        start = pos + separator.length();
    }
    v.addElement(original.substring(start)); // 尾段
    String[] result = new String[v.size()];
    for (int i = 0; i < result.length; i++)
        result[i] = (String) v.elementAt(i);
    return result;
}

使用範例

String csv = "張三,25,台北市,工程師";
String[] fields = split(csv, ",");
// fields = {"張三","25","台北市","工程師"}

String proto = "CMD|LOGIN|user01|pass123";
String[] parts = split(proto, "|");
// parts = {"CMD","LOGIN","user01","pass123"}

效能與記憶體考量

  • Vector 動態擴容會產生暫時物件,若分割極長字串(>10 KB)建議預估段數預先 new Vector(estimated)。
  • 避免在遊戲主迴圈高頻呼叫;啟動時解析設定檔屬一次性操作,影響可忽略。
  • 若分隔字元為單一字元(如 ','),可改寫為 char 版本進一步優化。

進階:支援正則表達式(輕量級)

若專案確需簡單正則(如 \\s+、[;,]),可整合 RegexpME(~15 KB),但對大多數資料分割需求,上述純字串分割已足夠。

結語

自製 split() 只需 20 行程式碼,即可讓 J2ME 專案擁有標準 Java 同等級的字串分割能力,零相依、極輕量。

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