2014-03-18 161 views
1

我需要在我的文本框中反转一个单词以显示在标签中,然后将字符串中的其他每个字符替换为“ - ”。例如:输入是textbox1.text = worms。我需要的输出为label1.text = s-r-w(这是“虫”逆转:“smrow”与更换“O”和“M”“ - ”)反转一个字符串并用“ - ”替换每一个其他字符

这是我迄今为止

Private Sub btnCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalc.Click 

    'Displays equipment in label in reverse order 
    label1.Text = reverse(textbox1.Text) 

    Function reverse(ByVal info As String) As String 
    Dim intM As Integer, strTemp As String = "" 
    intM = info.Length 
    For intJ As Integer = intM - 1 To 0 Step -1 
     strTemp &= info.Substring(intJ, 1) 
    Next 
    Return strTemp 
End Function 

我得到了相反的部分,但我不知道从哪里开始用“ - ”替换其他所有角色。对不起,我没有发布这第一次。我是新来的!

谢谢你们

+1

你一定要自己试一下,并要求在您遇到问题的具体领域的帮助。这就是工作原理。 –

+1

正如杰伊所说,在发布之前先试用一下。这种气味就像一个家庭作业问题。 –

回答

2

您可以使用Enumerable.ReverseString.Replace

Dim reversed = textBox1.text.Reverse() 
label1.Text = New String(reversed.ToArray()).Replace("o", "-").Replace("m", "-") 

或这个小查询其中包括:

Dim newChars = From c In textBox1.Text.Reverse() 
       Select If({"o", "m"}.Contains(c), "-"c, c) 
label1.Text = New String(newChars.ToArray()) 

或者甚至可能更好,因为它也处理使用替代品“忘记”VisualBasic StrReverse

label1.Text = Strings.StrReverse(textBox1.Text).Replace("o", "-").Replace("m", "-") 

Reversing a String that Contains Unicode Characters Expressed as Surrogate Pairs

更新如果您需要更换每第二字符,而不是。

Dim newChars = textBox1.Text.Reverse(). 
    Select(Function(c, Index) If(Index Mod 2 = 0, c, "-"c)) 
Label1.Text = New String(newChars.ToArray()) 

最后这里是一个使用StringBuilder它取代每n个字符与其他字符,如果它是一个方法不是“忽略字符”(在这种情况下,空间):

Public Shared Function ReplaceEveryNthChar(input As String, nth As Int32, newChar As Char, Optional ignoreChars As Char() = Nothing) As String 
    If input Is Nothing Then 
     Throw New ArgumentNullException("input") 
    End If 
    If input.Length = 0 Then Return "" 
    If input.Length = 1 Then Return input ' don't replace the first as desired 

    Dim ignore = New HashSet(Of Char)(If(ignoreChars, Enumerable.Empty(Of Char)())) 
    Dim sb = New System.Text.StringBuilder(input.Length) 
    Dim ignoredChars = 0 
    sb.Append(input(0)) ' don't replace the first as desired 
    For pos As Int32 = 2 To input.Length 
     Dim c = input(pos - 1) ' index zero based 
     If ignore.Contains(c) Then 
      ignoredChars += 1 
      sb.Append(c) 
     ElseIf (pos - ignoredChars) Mod nth = 0 Then 
      sb.Append(newChar) 
     Else 
      sb.Append(c) 
     End If 
    Next 
    Return sb.ToString() 
End Function 

您可以使用它通过这种方式:

Dim chars = textBox1.Text.ToCharArray() 
Array.Reverse(chars) 
label1.Text = ReplaceEveryNthChar(New String(chars), 2, "-"c, {" "}) 
+0

这将工作,但我需要替换其他任何字符的用户输入到textbox1。如果用户进入快艇,我需要将它显示为t-o-d-e-s。 – pforde

+0

@pforde:你需要替换什么?目前尚不清楚哪个字符应该保留,哪个字符应该被替换。什么是规则?你想重复每一个字符? –

+1

我需要用“ - ”替换字符串中的其他每个字符。所以如果输入textbox1.text是“帕特里克”,我需要标签中的输出为“k-i-t-p”。如果输入是“schmelter”,输出将是“r-t-e-h-s”。如果是“快艇”等多个单词,则输出为“t-o--e-p-”。这是否更有意义?我觉得这需要使用子字符串,但我不知道如何执行它。 – pforde

0

旧的解决方案,使用字符串生成器和反向循环:

Private Function MagicReplace(str As String) As String 
    Dim sb As New System.Text.StringBuilder 
    For i = str.Length - 1 To 0 Step -1 
    If i Mod 2 = 0 Then 
     sb.Append(str.Chars(i)) 
    Else 
     sb.Append("-") 
    End If 
    Next 
    Return sb.ToString 
End Function 

用法:

Dim output As String = MagicReplace("worms") 
Console.WriteLine(output) 'outputs s-r-w 
相关问题