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

Java List 實戰:字串統計與排序完整教學

     編輯:Java 綜合教學

Java List 實戰:字串統計與排序完整教學

本文透過一個實際練習題目,詳細示範如何使用 Java List 集合進行字串與數字的分類統計、排序輸出,並深入探討 List 介面常用方法、實作類別選擇與泛型宣告細節。

一、題目需求

  1. 從鍵盤輸入一組字串(包含數字與文字)。
  2. 使用 List 儲存資料,不可使用陣列。
  3. 統計數字與字串的個數。
  4. 將數字與字串分別按升序排列輸出。

二、List 介面核心知識

繼承體系

List 繼承 Collection 介面,擁有所有通用集合方法,並新增索引相關操作(因 List 為線性儲存結構)。

常用實作類別

  • ArrayList:陣列底層,隨機存取快(O(1)),適合查詢多、增刪少的場景。
  • LinkedList:雙向鏈結串列,增刪快(O(1)),適合頻繁插入刪除的場景。

泛型宣告實務細節

在 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>();

三、核心功能實作詳解

1. 判斷字串是否為數字的三種方法

方法程式碼片段優缺點
Character.isDigit逐字元檢查 Character.isDigit(char)精確控制,但需手動拆解字串
型別轉換捕獲例外Integer.parseInt(str) / Integer.valueOf(str)程式碼簡潔,利用例外機制判斷(本文採用)
正則表達式str.matches("[0-9]+")功能強大,但僅能判斷正整數

2. 計數與分類方法

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;
    }
}

3. 排序功能

直接呼叫 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(" ") 分割細節:連續空白會產生空字串,實務建議用 split("\\s+")。
  • 字串數字排序陷阱:Collections.sort 對字串採字典序,"10" 排在 "2" 前面。需轉型或自訂比較器。
  • 例外處理效能:大量資料時,try-catch 判斷數字效能較差,建議改用正則或 Character.isDigit。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved