C# 转动一串'&引用;“a”&引用;“b”&引用;"';放入字符串数组中

C# 转动一串'&引用;“a”&引用;“b”&引用;"';放入字符串数组中,c#,arrays,string,C#,Arrays,String,请阅读下面的详细信息: 我有一个字符串数组,如下所示: string[] data = new string[] { "word1", "word2", "word3" }; 我试图在字符串数组中放入一个字符串变量,该变量将包括“word1”、“word2”、“word3”数据。 换句话说,我希望字符串数组看起来是这样的: SingleStringHere = "\"word1\", \"word2\", \"word3\""; string[] data = new string[] { S

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

string[] data = new string[] { "word1", "word2", "word3" };
我试图在字符串数组中放入一个字符串变量,该变量将包括“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();
}
static void Main(字符串[]args)
{
字符串SingleStringHere=“\“word1\”、\“word2\”、\“word3\”;
string[]data=ParseSingleString(SingleStringHere);
foreach(数据中的字符串s)
{
控制台。写入线(s);
}
}
公共静态字符串[]ParseSingleString(字符串singleString)
{
List multipleStrings=新列表();
StringBuilder当前=新建StringBuilder();
bool inQuote=false;
for(int index=0;index
如果字符串可以包含引号,它可能会变得更复杂。这只是我的粗略示例

请注意,此操作可能会占用大量内存,并且会复制所有字符串等(我估计每个子字符串大约有3个副本)。您可以通过在其中一个字符串中记录第一个和最后一个字符的索引,然后在整个
单字符串
上取一个子字符串,来绕过其中的一些问题。还请注意,
列表
必须在返回数组之前复制到数组中。您可能只想返回一个
IEnumerable
,甚至可以一个
IList
。但是已经很晚了,我认为上面的内容足以回答这个问题


另外,我现在在一台Linux机器上,无法访问C#编译器,因此我对任何输入错误表示歉意。

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

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

为什么会有错误?代码相当于新的
string[]{“word1\”,“word2\”,“word3\”;
请阅读下面的文本,“代码没有错误,但是…”。所以回到等效代码的含义。然后将其与要求的代码和假设限制进行比较。我需要等效代码(字符串)位于字符串数组内部。数组没有将字符串作为单独的字符串读取,因此它没有被正确加密/格式化以用于数据包发送。为什么会这样?从未告诉过它。为什么转换为
string[]
string.Split()
已经返回了字符串数组。