2

私はVS2012、vb.netを使用しています。

文字列を配列にロードしたいと考えています。文字列は、スペース (" ") で区切られた一連の単語です。

現在、次のコードを使用しています。

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

これは完全に機能します。ただし、配列にロードされる一部のデータには例外があります。文字列 (スペースで区切られた文字列) 内のデータに、2 つの項目ではなく 1 つの項目として配列に読み込みたい 2 つの単語が含まれていることがあります。

これが私が話している文字列の例です:

トーナメント FFA チーム CTF クラン アリーナ テスト

例外は、「クラン アリーナ」という 2 つの単語です。

現在、分割コマンドを使用すると、次の要素を持つ配列が取得されます。

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」という単語であるかどうかを検出し、これを 2 つのエントリではなく 1 つのエントリとして追加するにはどうすればよいですか? また、「クラン アリーナ」という単語は変更される可能性があるため、「クラン アリーナ」という単語をハード コーディングするのではなく、文字列変数を介して行う必要があります。

4

1 に答える 1

2

もちろん、これを行うにはいくつかの方法があります。

1 つの方法は、入力文字列内のすべての特殊項目の空白を一時文字に置き換え、入力文字列を分割してから、一時文字を元の空白に戻すことです。


例:

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 に答える