[英]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.