Unhandheld异常:System.Indexoutofbound异常:索引超出了数组的范围

时间:2015-04-29 06:04:42

标签: c#

我正在尝试编写用于从字符串中拆分第一个char的代码,如: 输入= This Is Stackoverflow 输出(我想要的)= TIS 但我得到了Unhandheld Exception: System.Indexoutofbound exception: Index was outside the bound of array

//我的代码是

using System;
public class n2
{

    public static void Main(String[] args)
    {

        String s1;
        Console.WriteLine("Enter the string");
        s1=Console.ReadLine();
        Console.WriteLine(s1);
        char[] charArr=s1.ToCharArray();

        for(int i=0;i<s1.Length;i++)
        {
            Console.WriteLine(charArr[i]);
        }

        Console.WriteLine(s1.Length);
        char[] n1= new char[s1.Length];
        n1[0]=charArr[0];

        for(int j=1;j<s1.Length-1;j++)
        {               
                if(charArr[j]==' ')
                {   
                for(int k=1;k<10;k++)
                    {       
                        n1[k]=charArr[++j];
                    }
                          }     
        }

        for(int i=0;i<10;i++)
        {
            Console.Write(n1[i]);
        }   

    }
}

我不知道错误,请提供建议。 提前谢谢....

2 个答案:

答案 0 :(得分:0)

您的代码中存在问题n1[k]=charArr[++j];您需要在j子句中的charArr[++j]之前检查if的值。如下,

if(j<s1.Length-1)
{
   n1[k]=charArr[j++]; //doing post increment!
}

答案 1 :(得分:0)

错误的直接原因在于

  n1[k]=charArr[++j]; 

然而,正则表达式 Linq 似乎是一种更好的方法:

  String source = "This Is Stackoverflow";

  // "TIS"
  String result = String.Join("", Regex
    .Matches(source, @"(^| )\w")
    .OfType<Match>()
    .Select(m => m.Value.Trim()));