0
string strExample = 
"\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\",";

如何拆分上面的字符串","

我需要一个像

string[] arrExample = YourFunc(strExample);       
arrExample[0] == "10553210";       
arrExample[1] == "na";
arrExample[2] == "398,633,000";
...

带有拆分选项。

提前致谢

4

9 回答 9

6

这里有一个简单的方法,

using Microsoft.VisualBasic.FileIO;

IList<string> arrExample;
using(var csvParser = new TextFieldParser(new StringReader(strExample))
{
    fields = csvParser.ReadFields();
}
于 2013-07-09T11:15:17.953 回答
4

您可以不按逗号","而是按整个字符串拆分"\",\""。不要忘记Trim前导和尾随引号"

 String strExample =
   "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";

 string[] arrExample = St.Trim('"').Split(new String[] {"\",\""}, StringSplitOptions.None);
于 2013-07-09T11:17:13.010 回答
3

您可以在 "," 上拆分,第一个和最后一个条目必须清除最后一个和第一个条目中的 ":

string[] arr = strExample .Split(new string[] { "\",\"" },
               StringSplitOptions.None);

//remove the extra quotes from the last and the first entry
arr[0] = arr[0].SubString(1,arr[0].Length - 1);
int last = arr.Length - 1;
arr[last] = arr[last].SubString(0,arr[last].Length - 1);
于 2013-07-09T11:07:51.653 回答
0
string[] arrExample = strExample.Split(",");

会这样做,但你的代码不会编译。我假设你的意思是:

string strExample = "10553210,na,398,633,000,20130709,20130502,20120724";

如果这不是您的意思,请更正问题。

于 2013-07-09T11:05:53.923 回答
0

假设你的意思是:

string strExample = "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";

Split然后Select是子字符串:

string[] parts = strExample.Split(',').Select(x => x.Substring(1, x.Length - 2)).ToArray();

结果:

结果

于 2013-07-09T11:06:24.767 回答
0
strExample.Split(',');

如果要包含在示例字符串中,则需要转义双引号。

于 2013-07-09T11:07:16.970 回答
0

使用 Jodrell 的示例

  private string[] SplitFields(string csvValue)
  {
     //if there aren't quotes, use the faster function
     if (!csvValue.Contains('\"') && !csvValue.Contains('\''))
     {
        return csvValue.Trim(',').Split(',');
     }
     else
     {
        //there are quotes, use this built in text parser
        using(var csvParser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(csvValue.Trim(','))))
        {
           csvParser.Delimiters = new string[] { "," };
           csvParser.HasFieldsEnclosedInQuotes = true;
           return csvParser.ReadFields();
        }
     }
  }
于 2015-05-28T21:12:26.910 回答
0

这对我有用

public static IEnumerable<string> SplitCSV(string strInput)
    {
        string[] str = strInput.Split(',');
        if (str == null)
            yield return null;

        StringBuilder quoteS = null;
        foreach (string s in str)
        {
            if (s.StartsWith("\""))
            {
                if (s.EndsWith("\""))
                {
                    yield return s;
                }
                quoteS = new StringBuilder(s);
                continue;
            }

            if (quoteS != null)
            {
                quoteS.Append($",{s}");
                if (s.EndsWith("\""))
                {
                    string s1 = quoteS.ToString();
                    quoteS = null;
                    yield return s1;
                }
                else
                    continue;
            }



            yield return s;
        }
    }
static void Main(string[] args)
    {
        string s = "111,222,\"33,44,55\",666,\"77,88\",\"99\"";
        Console.WriteLine(s);

        var sp = SplitCSV(s);

        foreach (string s1 in sp)
        {
            Console.WriteLine(s1);
        }

        Console.ReadKey();
    }
于 2019-11-21T11:59:16.517 回答
-1

你可以这样做..

string stringname= "10553210,na,398,633,000,20130709,20130502,20120724";
 List<String> asd = stringname.Split(',');

或者如果你想要数组然后

array[] asd = stringname.Split(',').ToArray;
于 2013-07-09T11:07:06.157 回答