1

文字列から単語を抽出し、偶数文字をダッシュ​​..(空白を含まない)に置き換えて、単語ゲームの一種のヒントを作成しようとしています。例えば:

InputString="英語"

OutputString = "#n#l#s# #a#g#a#e"

現在、私は以下のコードを使用しています:

Private Sub Hint()

    Dim InputString as string = "English Language"
    dim SubInput as string()
    SubInput=InputString.Split(" ")

    For i=0 to UBound(SubInput) 'run through all items in SubInput array

        For k=0 to SubInput(i).length-1 'run through all characters in one item 

        If k mod 2= 0 then 'Do the replacement if even characters found
                SubInput(i)=SubInput(i).Replace(SubInput(i).Chars(k),"#") 
        End If

        Next

    Next

    Dim OutputString=String.Join(" ",subInput(i))
    Msgbox(OutputString)

    End Sub

ただし、これを示すメッセージボックスを受け取りました」

#n#l#s# #a###a#e

" The word: Language is wrongly replacement at character no (3)

それを修正する方法を指摘できますか?

ありがとうございました〜

4

4 に答える 4

2
(?<=^(?:\S\S|\s\S|\S\s)*).

これを使用して に置き換えることができます#デモを見る

于 2016-01-13T05:53:10.837 に答える
1

vksの回答 によると、正規表現ははるかに優れています.1行のコードで出力を達成できます。

 Dim InputString As String = "English Language"
 OutputString = System.Text.RegularExpressions.Regex.Replace(InputString, "(?<=^(?:\S\S|\s\S|\S\s)*).", "#")

(?<=^(?:\S\S|\s\S|\S\s)*).- フィルターするパターンです(入力文字列の偶数インデックス内の文字を検索します)入力文字列を置き換えます#

Live Demo


msdnチュートリアルポイントから vb.net の正規表現を学ぶ

于 2016-01-13T06:04:17.870 に答える
0

以下のようにlinqを試してください。

   string s = "English Language";
   string[] split = s.Split(" ");
   for(int j=0;j<split.length;j++)
   {
    var outStr = string.Concat(split[j].Select((c,i) => i%2==0 ? "#" : c.ToString()));
    split[j]= outStr;
   }
   s= String.Join(" ",split);

コードは C# ですが、コンバーターを使用して vb.net に変換できます

于 2016-01-13T05:36:40.903 に答える