转动字符串'";a"";b"";c"';转换为字符串数
本文关键字:quot 字符串 转换 | 更新日期: 2023-09-27 18:01:10
请阅读以下详细信息:我有一个字符串数组如下:
string[] data = new string[] { "word1", "word2", "word3" };
我试图在字符串数组中放入一个STRING变量,该变量将包括"word1"、"word2"answers"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>
。但时间已经晚了,我认为以上内容足以回答这个问题。
p.s.我现在在Linux机器上,无法访问C#编译器,所以我为任何拼写错误道歉
您可以从类似的格式化字符串中获取数组
string SingleStringHere = "'"word1'", '"word2'", '"word3'"";
String[] arr = SingleStringHere.Split(',');