J2ME 標準庫精簡,java.util.StringTokenizer 是僅有的字符串分割工具 (無 String.split()、無正則)。本文展示其核心用法與 J2ME 專項注意點。
public class StringTokenizer implements Enumeration {
public StringTokenizer(String str);
public StringTokenizer(String str, String delim);
public StringTokenizer(String str, String delim, boolean returnDelims);
public boolean hasMoreTokens();
public String nextToken();
public String nextToken(String delim);
public int countTokens();
}
// 1. 默認分隔符:空白字符 (空格、制表、換行、換頁)
StringTokenizer st1 = new StringTokenizer("name=value;type=int");
while (st1.hasMoreTokens()) {
System.out.println(st1.nextToken());
}
// 輸出:name=value;type=int (整個字符串,因無空白)
// 2. 自定義分隔符
StringTokenizer st2 = new StringTokenizer("name=value;type=int", "=;");
while (st2.hasMoreTokens()) {
System.out.println(st2.nextToken());
}
// 輸出:name / value / type / int
// 3. 返回分隔符本身
StringTokenizer st3 = new StringTokenizer("a,b,c", ",", true);
while (st3.hasMoreTokens()) {
System.out.println("[" + st3.nextToken() + "]");
}
// 輸出:[a] [,] [b] [,] [c]
// 4. 動態改變分隔符
StringTokenizer st4 = new StringTokenizer("key1=val1;key2=val2");
String token;
while ((token = st4.nextToken("=;")) != null) { // 需配合 hasMoreTokens
// 處理 token
}
'=' 和 ';',而非子串 "=;"。split("\\s+")),若需保留空字段需自行實現。countTokens() 為 O(n) 掃描,慎用於大字符串循環條件中。| 方案 | 優點 | 缺點 |
|---|---|---|
| StringTokenizer | 標準庫、零依賴、API 簡單 | 功能弱、無正則、分隔符為字符集 |
| 手寫解析 (indexOf/substring) | 完全可控、零對象創建、效能最高 | 代碼量大、易出邊界錯誤 |
| 第三方庫 (如 kXML, nanoxml) | 支援 XML/JSON 結構化解析 | 增大 JAR 體積、學習成本 |