加入空字符串数组

Join Array of strings except empty

我试图找到一种简单的方法来连接数组中的字符串 - 但前提是它们不为空。

示例:

Dim strArr(3)
strArr(0) = "This"
strArr(1) = "is"
strArr(2) = ""
strArr(3) = "a"
strArr(4) = "test"

strResult = Join(strArr, "***")
MsgBox strResult

将生成以下文本:This***is******a***test

但应该是:This***is***a***test

所以应该忽略空字符串。

下一个代码片段可能会有所帮助(甚至 ReDimstrArr):

option explicit
Dim strArr, strResult, strJoinString
ReDim strArr(4)
strArr(0) = "This"
strArr(1) = "is"
strArr(2) = ""
strArr(3) = "a"
strArr(4) = "test"

strJoinString = "€€€"
strResult = Join(strArr, strJoinString)
Do While Instr(1, strResult, strJoinString & strJoinString, vbBinaryCompare) > 0
  strResult = Replace( strResult, strJoinString & strJoinString, strJoinString)
Loop
strArr = Split(strResult, strJoinString)
strResult = Join(strArr, "***")

MsgBox strResult & vbNewLine & Join(strArr, "-")

确保strJoinString不匹配任何数组元素!

Option Explicit

Dim aStrArray
    aStrArray = Array("", "", "This", "", "", "is", "", "", "", "a", "test", "", "")

Dim strResult    
    strResult = MyJoin(aStrArray, "***")
    WScript.Echo strResult


Function MyJoin( inputArray, inputDelimiter )
Dim delimiter
    delimiter = Chr(1) & Chr(2) 
    With New RegExp
        .Pattern =  "^(?:" & delimiter & ")+" & _ 
                    "|(?:" & delimiter & ")+$" & _ 
                    "|(?:" & delimiter & ")+(" & delimiter & ")"
        .Global = True 
        MyJoin = Replace(.Replace(Join(inputArray, delimiter), ""), delimiter, inputDelimiter)
    End With
End Function

您可以将多次出现的定界符替换为一个。

在示例代码的函数中:

  1. 定义了一个分隔符,用于连接输入数组中的所有元素。创建它是为了降低在数据中找到它的可能性。
  2. 创建了一个正则表达式来处理分隔符的初始、结束和重复出现。
  3. 使用生成的分隔符连接输入数组
  4. 正则表达式用于删除不需要的分隔符序列
  5. 生成的分隔符替换为输入分隔符

一种方法是将所有非空字段复制到字典中,然后加入该字典的值:

Set d = CreateObject("Scripting.Dictionary")

For i = 0 To UBound(strArr)
  If strArr(i) <> "" Then d.Add i, strArr(i)
Next

WScript.Echo Join(d.Items, "***")