处理while循环时程序冻结

时间:2014-03-29 15:01:09

标签: vb.net

我正在使用他们希望我使用的教科书.length,.trim,.remove,.insert,.indexof,.substring,like,is not,以及其他一些。我有这个程序直到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

3 个答案:

答案 0 :(得分:2)

你的状况永远是真实的。

在此处查看IsNot运算符的详细信息: http://msdn.microsoft.com/en-us/library/t3bat82c.aspx

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

答案 1 :(得分:1)

您可以使用

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

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

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

没有理由将Regex用于这么简单的案例。