本文透過一個實際練習題目,詳細示範如何使用 Java List 集合進行字串與數字的分類統計、排序輸出,並深入探討 List 介面常用方法、實作類別選擇與泛型宣告細節。
List 繼承 Collection 介面,擁有所有通用集合方法,並新增索引相關操作(因 List 為線性儲存結構)。
在 main 方法區域宣告時,建議寫完整路徑避免 Eclipse 紅線錯誤:
java.util.List<String> list = new ArrayList<String>();
但在類別層級(static 欄位)可簡寫:
static List<String> number = new ArrayList<String>();
static List<String> word = new ArrayList<String>();
| 方法 | 程式碼片段 | 優缺點 |
|---|---|---|
| Character.isDigit | 逐字元檢查 Character.isDigit(char) | 精確控制,但需手動拆解字串 |
| 型別轉換捕獲例外 | Integer.parseInt(str) / Integer.valueOf(str) | 程式碼簡潔,利用例外機制判斷(本文採用) |
| 正則表達式 | str.matches("[0-9]+") | 功能強大,但僅能判斷正整數 |
static void count(List<String> l) {
for (int i = 0; i < l.size(); i++) {
if (isnumber(l.get(i))) {
number.add(l.get(i));
} else {
word.add(l.get(i));
}
}
System.out.println("NUMBERCOUNT: " + number.size());
System.out.println("WORDCOUNT: " + word.size());
}
static boolean isnumber(String a) {
try {
Integer.parseInt(a); // 會拋出 NumberFormatException 若非數字
return true;
} catch (Exception e) {
return false;
}
}
直接呼叫 Collections.sort() 靜態方法,List 內部元素需實作 Comparable 介面(String、Integer 均已實作):
Collections.sort(number); // 數字字串按字典序排序
Collections.sort(word); // 文字字串按字典序排序
注意:若需數值大小排序,應先轉為 Integer 型別或自訂 Comparator。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class classtest {
static List<String> number = new ArrayList<String>();
static List<String> word = new ArrayList<String>();
static void count(List<String> l) {
for (int i = 0; i < l.size(); i++) {
if (isnumber(l.get(i))) number.add(l.get(i));
else word.add(l.get(i));
}
System.out.println("NUMBERCOUNT: " + number.size());
System.out.println("WORDCOUNT: " + word.size());
}
static boolean isnumber(String a) {
try {
Integer.parseInt(a);
return true;
} catch (Exception e) {
return false;
}
}
public static void main(String[] args) {
System.out.println("please input the string");
Scanner get = new Scanner(System.in);
String str = get.nextLine();
System.out.println("string is " + str);
java.util.List<String> list = new ArrayList<String>();
String[] text = str.split(" "); // 以空白分割
for (int i = 0; i < text.length; i++) {
list.add(text[i]);
}
classtest.count(list);
Collections.sort(number);
Collections.sort(word);
System.out.println("number sort: " + number);
System.out.println("word sort: " + word);
}
}

split("\\s+")。Collections.sort 對字串採字典序,"10" 排在 "2" 前面。需轉型或自訂比較器。try-catch 判斷數字效能較差,建議改用正則或 Character.isDigit。