2014-03-29 199 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選項可能更合適。