繁体   English   中英

将一串 '"a", "b", "c"' 转换成字符串数组

[英]Turn a string of '"a", "b", "c"' into an array of strings

请阅读以下详细信息:我有一个字符串数组,如下所示

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

我正在尝试在字符串数组中放置一个 STRING 变量,该变量将包含“word1”、“word2”、“word3”数据。 换句话说,我希望字符串数组看起来像这样:

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

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

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

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

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> 但为时已晚,我认为上述问题足以解决这个问题。

Ps 我现在在 Linux 机器上无法访问 C# 编译器,所以我为任何错别字道歉。

您可以像这样从格式化的字符串中获取数组

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM