转一串'""," b"," c"'成为一个字符串数组

时间:2015-07-04 04:11:33

标签: c# arrays string

请阅读以下具体信息: 我有一个字符串数组:

mainimgdiv

我试图输入一个STRING变量,其中包括" word1"," word2"," word3"数据,在字符串数组内。 换句话说,我希望字符串数组看起来如此:

string[] data = new string[] { "word1", "word2", "word3" };

' SingleStringHere'变量将从服务器检索数据,该数据将在字符串数组中使用。字符串数组将被正确格式化和加密,以便通过套接字在数据包中发送。

代码没有错误,但是,' SingleStringHere'变量不被读作单独的字符串。我不想将检索到的服务器数据放入字符串数组中,因为这将是太多的解析!

2 个答案:

答案 0 :(得分:1)

如果您收到的字符串不包含逗号,您可以执行以下简单操作:

string SingleStringHere = "\"word1\", \"word2\", \"word3\"";
string[] data = SingleStringHere.Replace("\"").Split(',');

否则,您将不得不进行更复杂的解析。像这样:

static void Main(string[] args)
{
      string SingleStringHere = "\"word1\", \"word2\", \"word3\"";
      string[] data = ParseSingleString(SingleStringHere);
      foreach(string s in data)
      {
            Console.WriteLine(s);
      }
}

public static string[] ParseSingleString(string singleString)
{
      List<string> multipleStrings = new List<string>();
      StringBuilder current = new StringBuilder();
      bool inQuote = false;
      for(int index = 0; index < singleString.Length; ++index) // iterate through the string
      {
            if (singleString[index] == '"')
            {
                   inQuote = !inQuote;
            }
            else if (!inQuote && singleString[index] == ',') // split at comma if not in quote
            {
                   multipleStrings.Add(current.ToString().Trim());
                   current.Clear();
            }
            else
            {
                   current.Append(singleString[index]);
            }
      }
      multipleStrings.Add(current.ToString()); // don't forget the last one
      return multipleStrings.ToArray();
}

如果字符串可以包含引号,则可能会变得更加棘手。这只是我粗略的例子。

请注意,对于所有字符串复制等操作,此操作可能是内存密集型的(我为每个子字符串计算大约3个副本)。您可以通过记录其中一个字符串中的第一个和最后一个字符的索引,然后在整个singleString上获取子字符串来绕过其中的一部分。另请注意,List<string>必须在返回之前复制到数组中。您可能只想返回IEnumerable<string>,甚至是IList<string>。但现在已经很晚了,我认为上述内容足以解决这个问题。

P.S。我现在在Linux机器上没有访问C#编译器,所以我为任何拼写错误道歉。

答案 1 :(得分:1)

您可以从格式化字符串中获取数组,如此

string SingleStringHere = "\"word1\", \"word2\", \"word3\"";
String[] arr = SingleStringHere.Split(',');