请阅读以下具体信息: 我有一个字符串数组:
mainimgdiv
我试图输入一个STRING变量,其中包括" word1"," word2"," word3"数据,在字符串数组内。 换句话说,我希望字符串数组看起来如此:
string[] data = new string[] { "word1", "word2", "word3" };
' SingleStringHere'变量将从服务器检索数据,该数据将在字符串数组中使用。字符串数组将被正确格式化和加密,以便通过套接字在数据包中发送。
代码没有错误,但是,' SingleStringHere'变量不被读作单独的字符串。我不想将检索到的服务器数据放入字符串数组中,因为这将是太多的解析!
答案 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(',');