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

Java 字串分割:以逗號分隔電話號碼並逐個發送簡訊

     編輯:程式設計疑難解答

需求分析

輸入字串格式:"18263636366,053112345678,13900001111",包含手機與座機號碼,以逗號分隔。需遍歷每個號碼並呼叫發送介面。

標準實作

public class SmsBatchSender {
    public void sendBatch(String phonesStr) {
        if (phonesStr == null || phonesStr.trim().isEmpty()) return;
        
        // 1. 分割並去除空白
        String[] phones = phonesStr.split("\\s*,\\s*"); // 支援 "1, 2,3"
        
        for (String phone : phones) {
            if (isValidPhone(phone)) {
                sendSingleSms(phone); // 實際發送邏輯
                // 建議:異步發送、限流、失敗重試、記錄日誌
            } else {
                System.err.println("無效號碼格式: " + phone);
            }
        }
    }
    
    private boolean isValidPhone(String phone) {
        // 簡易驗證:11位手機 或 3-4位區號+7-8位座機
        return phone.matches("^(1[3-9]\\d{9}|0\\d{2,3}-?\\d{7,8})$");
    }
    
    private void sendSingleSms(String phone) {
        // 對接簡訊閘道 API (HTTP/webservice)
        System.out.println("發送至: " + phone);
    }
}

關鍵點補充

  • split("\\s*,\\s*"):正則表達式匹配逗號及其前後可能的空白,比單純 split(",") 更健壯。
  • **號碼驗證**必不可少,避免髒資料導致閘道報錯或扣費。
  • **大量發送時**:
    • 使用執行緒池 (ExecutorService) 併發發送,控制 QPS。
    • 引入消息佇列 (RabbitMQ/Kafka) 解耦生產消費,支援重試與監控。
    • 注意簡訊簽名、模板審核、運營商頻率限制。
  • 若號碼字串極大 (超過百萬),建議流式處理 (Scanner/BufferedReader) 避免一次性載入記憶體。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved