2016-01-13 141 views
1

我试图从字符串中提取单词,然后用短划线替换偶数字符。(不包括空格)为字游戏提供一种提示。例如:如何用“破折号”或“符号”替换字符串中的字符?

InputString = “英语”

OutputString = “#N#1#小号## 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#1##小号####A#一个ê

“ 字:语言被错误地在字符代替无(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 

希望这有助于。

+0

它很好用。 @Akhil库马尔。非常感谢您的帮助〜 –

+0

Akhil Kumar〜我发现一件事情,如果输入字符串超过2个单词,代码也会替换白色空间。所以,我修改了这样的条件:'如果intcount Mod 2 = 0并且c <>“”那么'。现在,它可以与字符串中的任何单词完美配合。你能修改上面的代码,以便其他人可以从中受益。谢谢〜 –

+0

谢谢@库马尔:) –

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

+0

谢谢f或者你的帮助,Pranay。我尝试它,但它显示变量“我”隐藏....错误。下面的库马尔代码适用于它。谢谢 –

+0

@GarenaPlusBeta - 立即尝试更新代码.... –

+0

让我试试吧@Pranay Rana –

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

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

+0

谢谢@VKS。我将学习使用正则表达式。此刻,我无法理解那个表情^^“ –

+0

@GarenaPlusBeta它的一个轻声背后说明唯一的偶应该在我们正在取代的角色后面。 – vks

+0

我不明白,但我赞成我的新东西.. –

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


更换了解的正则表达式VB .net来自msdntutorialspoint

+0

这是您wingedpanther的一个伟大的观点,我不知道那个正则表达式是多才多艺的,肯定会去学习它。谢谢@wingedpanther〜 –

+1

@vks upvoted:D ..... ... –

+1

我认为你在高级水平VKS。你不需要信用:D –