如何用" dash"替换字符串中单词的字符。或"符号"?

时间:2016-01-13 05:25:42

标签: regex vb.net string string-function

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

  

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

" 在字符号(3)

中错误地替换了语言这个词

你能指出如何解决这个问题吗?

非常感谢〜

4 个答案:

答案 0 :(得分:2)

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

您可以使用此选项并替换为#See Demo

答案 1 :(得分:1)

根据vks's answer,正则表达式要好得多。您可以在一行代码中实现输出。

 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的正则表达式

答案 2 :(得分: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中转换它

答案 3 :(得分: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

希望这会有所帮助。