2015-04-17 100 views
0

所以我有這樣的一段代碼:獲取有關名稱串子名字失敗[C#]

MessageBox.Show("Welcome," + name.Substring(0, nome.IndexOf(" ")) + "!"); 

可以假設名稱爲「Phiter費爾南德斯」,確定它會說:

歡迎,Phiter!

但是,如果名稱只是「Phiter」,它將停止並且不運行其餘的代碼。 顯然是因爲子字符串方法沒有空間來檢索名字。

但我不希望它跳過其餘代碼,我希望它即使沒有空間也能工作。

我嘗試使用嘗試捕捉,就像這樣:

try 
{ 
    MessageBox.Show("Welcome," + name.Substring(0, nome.IndexOf(" ")) + "!"); 
} 
catch 
{ 
    MessageBox.Show("Welcome," + name + "!"); 
} 

它的工作原理,但是當代碼運行的捕捉刺耳聲音。 有沒有其他解決方法?也許是獲得第一個名字的另一種方式?

回答

4

嘗試在有空格的地方分割字符串,然後選擇第一個元素,它始終是第一個名稱。

MessageBox.Show("Welcome," + name.Split(' ')[0] + "!"); 
+0

沒問題,歡迎來到StackOverflow! – Cyral

+1

只是稍作修改,它不適用於(「」),因爲它必須是過載字符而不是字符串。它與('') – Phiter

+0

哦,很好的捕獲,我忘了它不接受字符串。 – Cyral

0

您可以嘗試多個選項。

  1. 替換使用正則表達式。

    string input = "Your string  " + "whitespace."; 
    string pattern = "\\s+"; 
    string replacement = " "; 
    Regex rgx = new Regex(pattern); 
    string result = rgx.Replace(input, replacement); 
    
  2. 檢查空間是否存在。

    if(name.Contains(" ")) 
        MessageBox.Show("Welcome," + name.Substring(0, nome.IndexOf(" ")) + "!"); 
    
  3. 裝飾空間

    string fullName = name; 
    var names = fullName.Split(' '); 
    string firstName = names[0]; 
    MessageBox.Show("Welcome," + firstName + "!"); 
    

讓我知道你用哪一個!