Excel VBA 编程基础 -- 文字处理(四)
今天继续上一期的讨论,今天讨论几个对字符串进行分割组合的函数。Filter 返回一个数组,其中的元素来自一个字符串数组中满足条件的元素。其一般格式是:Filter(strarray, match [, include [, compare ]])其中,strarray 是一个一维的字符串数组。match 是需要搜索的字符串。可选参数 include 是 Boolean 类型,True 表示包含那些与要搜索的字符串 match 匹配的元素,False 表示不包含那些与 match 匹配的元素。可选参数 compare 表示搜索时的比较方式,具体意义请参见文末相关阅读中的《文字处理(三)》。由图可见,Filter 用来在一个字符串数组中寻找匹配(或部分匹配)的元素,返回结果取决于可选参数 include:True 则返回匹配的元素,False 则排除匹配的元素。Join 将一个字符串数组中的元素串联起来组成一个字符串。其一般格式如下:Join(strarray [, delimiter ])其中,strarray 是一个字符串数组,可选参数 delimiter 是串联字符串时的分隔符,如果省略 delimiter,则默认使用空格(“ ”)作为分隔符;如果 delimiter 为空字符串(""),则串联的字符串将没有分隔符。Join 返回串联起来的字符串。在这个例子中,我们将构成 Notepad.exe 的几个部分用 Join 串联起来,构成记事本应用程序的完整路径名(pathname),然后用 Shell 启动它。顾名思义,Replace 就是对一个字符串中的某个子串,用另外一个字符串来替换。其一般格式是:Replace(strexpr, string1, string2 [, start [, count [, compare ]]])其中,strexpr 是原始字符串,string1 是要被替换的子串,string2 是用来替换 string1 的新字符串。可选参数 start 指定从哪里开始搜索子串 string1,如果省略,则默认从 1 开始。可选参数 count 指定了要替换的次数,如果省略,则默认是 -1,表示对 string1 的所有出现全部替换。可选参数 compare 指示字符串比较方式,具体请参见文末相关阅读中的《文字处理(三)》中关于 compare 参数的讨论。这个例子演示了 count 取值为 1 即只替换一次的情况,也演示了省略 count 从而替换所有匹配的情况。与 Join 是串联数组元素组成字符串相反,Split 是分割字符串组成数组。其一般格式是:Split(strexpr [, delimiter [, limit [, compare ]]])其中,strexpr 是一个字符串表达式。如果 strexpr 是一个空字符串,则 Split 返回一个空数组。可选参数 delimiter 是用来分割字符串的分隔符,如果省略 delimiter,则默认使用空格(" ")作为分隔符。如果 delimiter 为空字符串(""),则 Split 返回只含一个元素的数组,该元素就是 strexpr。可选参数 limit 指定返回多少个子串,如果省略,则默认是 -1,表示返回所有子串。可选参数 compare 指定字符串比较方式,具体含义请参见文末相关阅读《文字处理(三)》。注:所谓空数组(empty array),是指没有元素的数组,具体而言,即数组的下界为 0,上界为 -1,元素个数 = 上界 - 下界 + 1 = 0。在这个例子中,我们看到,对于空字符串,Split 返回空数组。下面的三段代码分别演示了 limit 不同取值的情况下,Split 的返回内容:- limit = 1:limit 取值 1,表示只返回一个子串,从结果看,Split 将整个 strexpr 作为一个子串返回。
- limit = 2:limit 取值 2,表示只返回 2 个子串,结果是 Split 将整个字符串 strexpr 分割为两个子串返回。
- (limit = -1):省略 limit,表示 limit 取值 -1,结果是 Split 返回所有可能的子串。
由此可见,limit 可以控制 Split 将字符串分割为几部分,delimiter 可以控制 Split 从哪里分割字符串,而 compare 则可以控制分割字符串时是否考虑字母大小写。