學習軌道
/
C#
C#
/
練習
/
日誌分析
日誌分析

日誌分析

學習練習

簡介

擴充方法

擴充方法可以讓你在不建立新的衍生型別、不重新編譯,也不以其他方式修改原始型別的情況下,為現有型別新增方法。擴充方法雖然定義為靜態方法,卻是以執行個體方法的語法來呼叫。它們的第一個參數前面會加上this修飾詞,用來指定方法所操作的型別,並在命名空間層級納入範圍。

public static int WordCount(this string str)
{
    return str.Split().Length;
}

"Hello World".WordCount();
// => 2

說明

在這個練習中,你會處理一行行的日誌。

每一行日誌都是格式如下的字串:"[<LEVEL>]: <MESSAGE>"。

日誌層級有三種:

  • INFO
  • WARNING
  • ERROR

你有幾個任務,每個任務都會拿到一行日誌,並要你對它做些處理。

1. 取得特定子字串之後的字串

回顧上個月的日誌,你會發現測試訊息總是位於某個特定子字串之後。預期不久的將來會需要擷取測試訊息,你決定建立一個輔助方法來幫你處理這件事。

請實作(static)LogAnalysis.SubstringAfter() 擴充方法,它會接收一個字串分隔符號,並回傳分隔符號之後的子字串。

var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."

2. 取得兩個子字串之間的字串

進一步檢查後,你會發現日誌層級總是位於方括號([ 和 ])之間。預期不久的將來也會需要擷取日誌層級,你決定再建立一個輔助方法來幫你處理這件事。

請實作(static)LogAnalysis.SubstringBetween() 擴充方法,它會接收兩個字串分隔符號,並回傳位於這兩個分隔符號之間的子字串。

var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"

3. 解析日誌中的訊息

請實作(static)LogAnalysis.Message() 擴充方法,回傳一行日誌中所包含的訊息。

var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."

4. 解析日誌中的日誌層級

請實作(static)LogAnalysis.LogLevel() 擴充方法,回傳一行日誌的日誌層級。

var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 日誌分析 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。