-3

我怎样才能用空格分割它。(第一行是它的标题)

在此处输入图像描述

我尝试此代码,但在 cbay.ABS = columnsC[5] 处出现错误“索引超出范围”,因为第二行仅返回 4 而不是第一行中的 6 个元素。我希望第二行也返回 6 个元素。

using (StringReader strrdr = new StringReader(strData))
{
    string str;
    while ((str = strrdr.ReadLine()) != null)
    {
        //  str = str.Trim();
        if ((Regex.IsMatch(str.Substring(0, 1), @"J")) || (Regex.IsMatch(str.Substring(0, 1), @"C")))
        {
            columnsC = Regex.Split(str, " +");
            cbay.AC = columnsC[1];
            cbay.AU = columnsC[2];
            cbay.SA = columnsC[3];
            cbay.ABS = columnsC[5];
            // cbay.ABS = str;
        }
    }
}
4

2 回答 2

2

为了只获得没有多余空格的单词,您可以将StringSplitOptions.RemoveEmptyEntries其作为Split方法的第二个参数传递string,如果将删除所有多余的“空格”,因为它将在每个空格上拆分。而不是使用正则表达式检查这个简单的例子:

string inputString = "Some string   with  words     separated with multiple    blanck   characters";
string[] words = inputString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string resultString = String.Join(" ", words); //joins the words without multiple whitespaces, this is for test only.

编辑在您的特定情况下,如果您使用此字符串,其中部分用多个空格(至少三个)分隔,它将起作用。检查示例:

string inputString = "J   16   16   13   3   3";
string[] words = inputString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

EDIT2:这是解决您的问题的最简单和最愚蠢的解决方案,但我认为它会起作用:

if(str.Length>0 && ((str[0]=="J") || (str[0]=="C")))
{
   columnsC = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
   if((str[0]=="J")
   {
            cbay.AC = columnsC[1];
            cbay.AU = columnsC[2];
            cbay.SA = columnsC[3];
            cbay.ABS = columnsC[5];
   }
   else
   {
            cbay.AU = columnsC[1];
            cbay.SA = columnsC[2];
   }
}
于 2013-03-29T09:49:54.427 回答
0

您可以首先用零替换多个空格,然后拆分剩余的单个空格;

        var test = "test 1 2    3";
        var items = test.Replace("  ", "0").Split(' ');

如果有很多空格,你可能会得到一些 00 位置,但我猜这仍然有效

于 2013-03-29T10:02:23.743 回答