2

我正在使用 VS2012,vb.net。

我想将字符串加载到数组中。字符串是由空格 (" ") 分隔的一系列单词。

目前我正在使用以下代码:

Dim stringTempCurrentGameTypes() As String = Split(stringTypeList, " ")

这完美地工作。但是,对于加载到数组中的某些数据,我有一个例外。有时,字符串中的数据(由空格分隔的字符串)有两个单词,我想将它们作为一项加载到数组中,而不是两项。

这是我正在谈论的字符串的示例:

锦标赛 FFA 团队 CTF 部落竞技场测试

例外是“氏族竞技场”这两个词。

目前,如果我只使用 split 命令,我会得到一个包含以下元素的数组:

item(0) = tourney 
item(1) = ffa
item(2) = team
item(3) = ctf
item(4) = clan
item(5) = arena
item(6) = test

我在以下之后:

item(0) = tourney 
item(1) = ffa
item(2) = team
item(3) = ctf
item(4) = clan arena
item(5) = test

如何检测添加到数组中的项目是否是“clan arena”一词,并将其添加为一个条目,而不是两个条目?此外,“clan arena”这个词可能会改变,所以我不需要硬编码“clan arena”这个词,而是需要通过一个字符串变量来完成。

4

1 回答 1

2

当然,有几种方法可以做到这一点。

一种方法是用临时字符替换输入字符串中所有特殊项的空格,拆分输入字符串,然后将临时字符改回原始空格。


例子:

Dim raw = "tourney ffa team ctf clan arena test"
Dim special_words = new String() {"clan arena"}
Dim tmp_char = "$"

For Each word in special_words
    raw = raw.Replace(word, word.Replace(" ", tmp_char))
Next

Dim result = raw.Split(new Char() {" "c})
For i = 0 To result.Count -1 
    result(i) = result(i).Replace(tmp_char, " ")
Next

作为临时字符,您可以使用不可打印的字符,例如Chr(31)(单位分隔符)或任何您知道不会出现在输入字符串中的字符。

这种方法非常简单,并且可以保留项目的顺序。

于 2012-08-20T07:42:20.200 回答