我正在尝试从字符串中提取单词,然后用短划线替换偶数字符..(不包括空格)来为单词游戏提供一种提示。例如:
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)
中错误地替换了语言这个词你能指出如何解决这个问题吗?
非常感谢〜
答案 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)*).
- 要过滤的模式(查找输入字符串的偶数索引中的字符)您的输入字符串将替换为#
答案 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
希望这会有所帮助。