2014-03-29 212 views
1

我正在教科书中工作,他们希望我使用.length,.trim,.remove,.insert,.indexof,.substring,like,is not,and some other。我有这个程序工作直到while循环,它冻结。 是否有另一个运算符查看可以用于我正在尝试执行的模式(或者有没有一种方法可以用来执行此操作)?如果是这样,我该如何使用它?当循环处理时,程序冻结

Private Sub btnConvert_Click(sender As Object, e As EventArgs) Handles btnConvert.Click 

    Dim strWord As String 

    strWord = txtBefore.Text 

    If strWord.ToUpper.Substring(0, 1) Like "[A,E,I,O,U]" Then 
     strWord = strWord.Insert(strWord.Length, "-way") 
    ElseIf strWord.ToUpper.Contains("A") Or 
     strWord.ToUpper.Contains("E") Or 
     strWord.ToUpper.Contains("I") Or 
     strWord.ToUpper.Contains("O") Or 
     strWord.ToUpper.Contains("U") Then 

     strWord = strWord.Insert(strWord.Length, "-") 

     'works up until the while loop 
     'program freezes no error 
     While strWord.ToUpper.Substring(0, 1) IsNot "[A,E,I,O,U,Y]" 

      Dim strTemp As String 

      strTemp = strWord.Substring(0, 1) 
      strWord = strWord.Remove(0, 1) 
      strWord = strWord.Insert(strWord.Length, strTemp) 
     End While 

     strWord = strWord.Insert(strWord.Length, "ay") 

    End If 

    'txtAfter.Text = strWord 
End Sub 
+0

你调试了吗? – OneFineDay

+0

无限循环? – OneFineDay

+0

多数民众赞成在即时通讯思维,只是试过调试它仍然摊位 – 0000

回答

1

取而代之的是:

While strWord.ToUpper.Substring(0, 1) IsNot "[A,E,I,O,U,Y]" 

你可能想要这个:

While Not {"A","E","I","O","U","Y"}.Contains(strWord.ToUpper.Substring(0, 1)) 

没有理由使用正则表达式对于这样一个简单的例子。

+0

哇真棒回答它完美的作品! – 0000

2

你在这段时间的状况永远是真的。

见IsNot运算操作这里的细节: http://msdn.microsoft.com/en-us/library/t3bat82c.aspx

的IsNot运算操作确定两个对象引用指向不同的对象。但是,它不会执行值比较。如果object1和object2都引用完全相同的对象实例,则结果为False;如果他们不这样做,结果是真的。

+0

是他们的模式匹配相反的像我可以使用?我没有意识到他们如此不同。 – 0000

+0

我会推荐使用正则表达式进行模式匹配 –

+0

您可以举例说明它如何在代码中工作吗? – 0000

1

你可以使用

While "AEIOUY".IndexOf(strWord.Substring(0, 1), StringComparison.OrdinalIgnoreCase) >= 0 

StringComparison.OrdinalIgnoreCase使得区分insenstive。使用.ToUpper是尝试进行不区分大小写比较的显而易见的方法,但如果您必须在其他文化中进行字符串比较,则会导致问题。不同的StringComparison选项可能更合适。