在带有子字符串的名称字符串上获取名字失败 [C#]

Getting first name on name string with substring fails [C#]

所以我有这段代码:

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

假设名字是"Phiter Fernandes",好的,它会说:

欢迎您,菲特!

但是如果名称只是 "Phiter" 它将停止而不是 运行 其余代码。 很明显是因为substring方法没有space来检索名字。

但我不希望它跳过其余代码,我希望它即使没有 space.

也能正常工作

我试过使用 try catch,就像这样:

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

它可以工作,但是当代码 运行 被捕获时会发出恼人的声音。 有没有其他办法解决这个问题?也许是另一种获取名字的方式?

尝试在有 space 的地方拆分字符串,并选择第一个元素,它始终是名字。

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

您可以尝试多个选项。

  1. 替换使用正则表达式。

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

    if(name.Contains(" "))
        MessageBox.Show("Welcome," + name.Substring(0, nome.IndexOf(" ")) + "!");
    
  3. trim spaces

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

告诉我你用的是哪一个!