HOW TO:統計某個字在字串中出現的次數 (LINQ)
更新:2007 年 11 月
這個範例顯示如何使用 LINQ 查詢來計算指定的文字出現在字串中的次數。請注意,若要執行計算,請先呼叫 Split 方法以建立文字陣列。執行 Split 方法會影響效能。如果要對字串執行的作業只有計算字數,您應該考慮改為使用 Matches 或 IndexOf 方法。不過,如果效能並非重要考量,或者已分割句子來對該句子執行其他類型的查詢,則使用 LINQ 來計算字數或片語數也很合理。
範例
Class CountWords
Shared Sub Main()
Dim text As String = "Historically, the world of data and the world of objects" & _
" have not been well integrated. Programmers work in C# or Visual Basic" & _
" and also in SQL or XQuery. On the one side are concepts such as classes," & _
" objects, fields, inheritance, and .NET Framework APIs. On the other side" & _
" are tables, columns, rows, nodes, and separate languages for dealing with" & _
" them. Data types often require translation between the two worlds; there are" & _
" different standard functions. Because the object world has no notion of query, a" & _
" query can only be represented as a string without compile-time type checking or" & _
" IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to" & _
" objects in memory is often tedious and error-prone."
Dim searchTerm As String = "data"
' Convert the string into an array of words.
Dim dataSource As String() = text.Split(New Char() {" ", ",", ".", ";", ":"}, _
StringSplitOptions.RemoveEmptyEntries)
' Create and execute the query. It executes immediately
' because a singleton value is produced.
' Use ToLower to match "data" and "Data"
Dim matchQuery = From word In dataSource _
Where word.ToLowerInvariant() = searchTerm.ToLowerInvariant() _
Select word
' Count the matches.
Dim count As Integer = matchQuery.Count()
Console.WriteLine(count & " occurrence(s) of the search term """ & _
searchTerm & """ were found.")
' Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
End Sub
End Class
' Output:
' 3 occurrence(s) of the search term "data" were found.
class CountWords
{
static void Main()
{
string text = @"Historically, the world of data and the world of objects" +
@" have not been well integrated. Programmers work in C# or Visual Basic" +
@" and also in SQL or XQuery. On the one side are concepts such as classes," +
@" objects, fields, inheritance, and .NET Framework APIs. On the other side" +
@" are tables, columns, rows, nodes, and separate languages for dealing with" +
@" them. Data types often require translation between the two worlds; there are" +
@" different standard functions. Because the object world has no notion of query, a" +
@" query can only be represented as a string without compile-time type checking or" +
@" IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to" +
@" objects in memory is often tedious and error-prone.";
string searchTerm = "data";
//Convert the string into an array of words
string[] source = text.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);
// Create and execute the query. It executes immediately
// because a singleton value is produced.
// Use ToLowerInvariant to match "data" and "Data"
var matchQuery = from word in source
where word.ToLowerInvariant() == searchTerm.ToLowerInvariant()
select word;
// Count the matches.
int wordCount = matchQuery.Count();
Console.WriteLine("{0} occurrences(s) of the search term \"{1}\" were found.", wordCount, searchTerm);
// Keep console window open in debug mode
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
/* Output:
3 occurrences(s) of the search term "data" were found.
*/
編譯程式碼
建立以 .NET Framework 3.5 版為目標的 Visual Studio 專案。專案預設會含 System.Core.dll 的參考,以及 System.Linq 命名空間 (Namespace) 的 using 指示詞 (C#) 或 Imports 陳述式 (Visual Basic)。請在 C# 專案中,加入 System.IO 命名空間的 using 指示詞。
將此程式碼複製至您的專案。
按 F5 編譯和執行程式。
按任何鍵離開主控台視窗。