检查Split方法是否为空

时间:2016-12-06 21:33:27

标签: c# methods split

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace switchStatementExercise
{
    class Program
    {
        static void Main(string[] args)
        {
            String response;

            Console.WriteLine("Please Vote for your president out of the 7 following, Joseph Mason, James Long, Ben Harding, Georgia Mason, Keith Webb, Mark Grimley, Max Gridley");
            response = Console.ReadLine();

            string fullNameJoe = response;
            var names = fullNameJoe.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
            string firstName = names[0];
            string lastName = names[1];
            Console.WriteLine(lastName);
            if (response.Equals(fullNameJoe) || response.Equals(firstName) || response.Equals(lastName))
            {
                Console.WriteLine("You have voted for " + fullNameJoe);
                Console.WriteLine(fullNameJoe);

            }
            else if (fullNameJoe.Length > 1 && lastName == null)
            {

                Console.WriteLine("You need a last name");
            }
            else
            {
                Console.WriteLine("Please enter a first name and last name");
            }

        }
    }
}

所以我要做的就是检查姓氏是否为空,所有用户都输入了姓氏,但我收到了这个错误。

  

未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。      在C:\ Users \ Joe \ Desktop \ cSharpWeek1 \ switchStatementExercise \ switchStatementExercise \ Program.cs:line 21

中的switchStatementExercise.Program.Main(String [] args)

任何帮助或重定向到答案都会很棒!

1 个答案:

答案 0 :(得分:0)

  

索引超出了数组的范围

表示无论您在那里输入什么内容,names[1]之后都没有Split(最有可能)。所以,如果你输入" alex;" - 把...忘了吧。

您可以查看

if (names.Length < 2)
{
    Console.WriteLine("You need first and last name");
    return;
}

另一方面,为什么&#34 ;;&#34;?它会期待打字&#34; alex; morgan&#34;。我们通常输入&#34; alex morgan&#34;然后分成&#34; &#34 ;.您可以使用任何字符拆分

fullNameJoe.Split(" ,;-/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

在第二部分

if (response.Equals(fullNameJoe) || response.Equals(firstName) || response.Equals(lastName

这没有多大意义。第一个条件永远是真的。第二和第三个条件是真是假。你可能需要做的是创建一个列表

var presidents = "Joseph Mason, James Long, Ben Harding, Georgia Mason, Keith Webb, Mark Grimley, Max Gridley".
    Split(",".ToCharArray()).Select(p => p.Trim()).ToArray()

然后检查第一个条件(可选)[if (names.Length < 2)]。或者您可以直接进行名称检查

if (names.Contains(response.Trim(), StringComparer.OrdinalIgnoreCase))
{
    Console.WriteLine("yes"); 
}