1

我正在尝试从字符串中提取单词,然后用破折号替换偶数字符。(不包括空格)为文字游戏提供一种提示。例如:

InputString="英语语言"

输出字符串 = "#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

" 单词:Language在字符号 (3) 处被错误替换

你能指出如何修复它吗?

非常感谢~

4

4 回答 4

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

您可以使用它并替换为#. 看演示

于 2016-01-13T05:53:10.837 回答
1

根据vks 的回答, 正则表达式会好得多。您可以在一行代码中实现输出。

 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


从msdntutorialspoint学习 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 回答
0

你能试试这个代码吗?很容易实现和理解

Dim s As String = "English Language"
        Dim intcount As Integer = 0
        For Each c As Char In s
            If intcount Mod 2 = 0 and c <> "" Then
                s = s.Remove(intcount, 1).Insert(intcount, "#")
            End If
            intcount += 1
        Next
 Return s

希望这可以帮助。

于 2016-01-13T05:49:10.607 回答