2013-04-05 24 views
2

試圖獲得此更改解析的字符串段的第一個字母的情況。因此,如果用戶在txtName中輸入「JOHN WAYNE DOE」,那麼它將顯示「John Wayne Doe」 我按照它在書中顯示的方式輸入它,但消息框顯示解析的字符串,但是它在上面的示例中被輸入返回的是「JOHN WAYNE DOE」 我認爲這是一個邏輯錯誤,因爲我知道這麼做很多,我不知道我犯了什麼錯誤。在視覺基礎上使用toupper和tolower

Dim name As String = txtName.Text 
    name = name.Trim 
    Dim names() As String = name.Split(CChar(" ")) 
    Dim firstName As String = names(0) 
    Dim middleName As String = names(1) 
    Dim lastName As String = names(2) 

    Dim firstLetters1 As String = firstName.Substring(0, 1).ToUpper 
    Dim otherletters1 As String = firstName.Substring(1).ToLower 

    Dim firstLetters2 As String = middleName.Substring(0, 1).ToUpper 
    Dim otherletters2 As String = middleName.Substring(1).ToLower 

    Dim firstletters3 As String = lastName.Substring(0, 1).ToUpper 
    Dim otherletters3 As String = lastName.Substring(1).ToLower 

    MessageBox.Show("First Name: " & firstName & vbCrLf & "Middle Name: " & middleName & vbCrLf & "Last Name: " & lastName) 

回答

0

試試這個:

MessageBox.Show(_ 
    "First Name: " & firstLetters1 & otherletters1 & vbCrLf & _ 
    "Middle Name: " & firstLetters2 & otherletters2 & vbCrLf & _ 
    "Last Name: " & firstLetters3 & otherletters3) 

字符串是不可變類,你ToUpperToLower調用創建新實例。在消息框中傳遞舊的未處理的實例。只要你做到這一點之前

MessageBox.Show("First Name: " & firstName & vbCrLf & "Middle Name: " & middleName & vbCrLf & "Last Name: " & lastName) 

:上

firstName = firstLetters1 & otherletters1 
middleName = firstLetters2 & otherletters2 
lastName = firstLetters3 & otherletters3 

這可能讓你一個更好的主意


更新 或者,您可以使用我們的老電話字符串的不變性如何工作。

+0

+ 1這樣做,現在我看到它進入消息框塊,這是非常合理的。我的書只提供瞭如何使用toupper和tolower的例子,但沒有提供如何將它們傳遞給消息框的例子。 – thewaytonever 2013-04-05 08:49:00

5

僅舉這種替代

Dim currentCulture As CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture 
Dim titleCase = currentCulture.TextInfo.ToTitleCase(txtName.Text) 
Console.WriteLine(titleCase) 
Dim names() As String = titleCase.Split(" "c) 
...... 

這種方法確保字符串尊重當前文化的正確的大小寫。
並不需要如此多的直接分割和字符串連接與固有的內存佔用。 (在內部,一個StringBuilder用於操縱輸入字符串,只有一個最終的ToString()返回的結果)

+0

對於'.ToTitleCase'的用法,我個人從來沒有遇到過。 – 2013-04-05 09:04:20

+1

是的,有時用NET庫挖掘就像尋寶。 – Steve 2013-04-05 09:07:23

0
Dim Name As String = "JOHN WAYNE DOE" 
Name = Microsoft.VisualBasic.StrConv(Name, VbStrConv.ProperCase) 

的會給輸出「約翰·韋恩李四」