如何统计字符串中vbTab数量?达到3个时添加vbCrLf换行
Hey there! Let's break down how to solve this problem—we need to count the number of vbTab characters in a dynamically built string and insert a vbCrLf every time that count hits 3. Here's a straightforward, flexible approach:
Step 1: Track Tab Count Dynamically
Instead of building the string blindly and then modifying it later, we'll keep a running count of tabs as we append each message. This is efficient and avoids reprocessing the entire string every time we add content.
Step 2: Count Existing Tabs (If Starting with a Pre-built String)
If you're starting with an existing string (like your example), first calculate how many tabs are already present so we can pick up where we left off.
Complete Code Example
' Initialize your starting string (as given in your example) Dim msg As String = "message 1" & vbTab & " Message 2 " & vbTab & "Message 3" & vbTab ' Function to count existing vbTabs in a string Private Function CountTabs(inputStr As String) As Integer ' Calculate by comparing original length to length with tabs removed Return (Len(inputStr) - Len(Replace(inputStr, vbTab, ""))) \ Len(vbTab) End Function ' Initialize tab count with existing tabs Dim tabCount As Integer = CountTabs(msg) ' Example: Dynamically append more messages Dim newMessages() As String = {"Message 4", "Message 5", "Message 6", "Message 7", "Message 8"} For Each message As String In newMessages ' Append the message followed by a tab msg &= message & vbTab tabCount += 1 ' Increment tab count ' Check if we've hit 3 tabs (or a multiple of 3) If tabCount Mod 3 = 0 Then msg &= vbCrLf ' Add newline End If Next ' Output the result Console.WriteLine(msg)
How This Works
- Counting Existing Tabs: The
CountTabsfunction uses string replacement to reliably count how manyvbTabcharacters are in the initial string. - Dynamic Appending: For each new message, we add it to the string along with a
vbTab, then increment our tab counter. - Adding Newlines: Whenever the tab count is a multiple of 3 (using
Mod 3 = 0), we append avbCrLfto create a new line.
Result of the Example
The final string will look like this (formatted for readability):
message 1 Message 2 Message 3 Message 4 Message 5 Message 6 Message 7 Message 8
(Note: \t represents vbTab, \r\n represents vbCrLf)
Alternative: Batch Processing
If you have a list of messages to add all at once, you can process them in chunks of 3 for cleaner code:
Dim newMessages() As String = {"Message 4", "Message 5", "Message 6", "Message 7", "Message 8"} For i As Integer = 0 To newMessages.Length - 1 Step 3 ' Build a chunk of up to 3 messages with tabs Dim chunk As String = String.Join(vbTab, newMessages.Skip(i).Take(3)) & vbTab msg &= chunk ' Add newline only if we added a full chunk of 3 messages If i + 3 <= newMessages.Length Then msg &= vbCrLf End If Next
This approach groups messages into sets of 3, joins them with tabs, and adds a newline after each full group.
内容的提问来源于stack exchange,提问作者Kapil

