在C#应用程序中,我将表单数据连接成字符串格式,然后传递给Web服务期望的格式。
string firstName = "Test";
string lastName = "Test";
string freeText = "this is some free text, thanks";
string submitString = firstName + "," + lastName + "," + freeText;
稍后在应用程序中,我需要将其从网络服务中返回以便在其他地方使用时,将其分开。
string[] returnData = submitString.Split(',');
但是,如果自由文本包含逗号,则returnData变量会将其拆分为字符串数组的一部分,我希望将freeText的内容保留为一个完整的字符串(尽管包含逗号)。
有没有一种快速的方法可以忽略字符串拆分中该字段的内容(而不是阻止客户输入逗号)。
答案 0 :(得分:4)
如果满足以下两个条件:
然后,是的,您可以使用the String.Split(char[], int) overload指定要返回的最大项目数:
var s = "Test,Test,this is some free text, thanks";
var a = s.Split(new[] {','}, 3); // return at most 3 items
Console.WriteLine(a[0]); // prints Test
Console.WriteLine(a[1]); // prints Test
Console.WriteLine(a[2]); // prints this is some free text, thanks
否则,答案是“否”,因为String.Split无法看到“字段分隔逗号”和“用户输入逗号”之间的区别。怎么知道将Test,Test,free text, thanks,Test
拆分为Test/Test/free text, thanks/Test
或Test/Test/free text/ thanks,Test
?
但是,还有其他几种方法可以解决此问题:
实际上,您拥有的是一个带有“逗号分隔值”(CSV)的字符串。如果您使用专业的CSV库(而不是String.Join / String.Split),则包含逗号的值将被引用,并且在提取值时这些逗号将被忽略。
一个更简单的解决方案可能是完全使用不同的字符串格式:如果将值编码为JSON数组而不是CSV字符串,则JSON库将负责编码/解码包含特殊字符的值。
很显然,如果您可以避免将所有值全部编码为单个字符串 ,而只需使用数组或其他数据结构,问题就会消失。但是,您的问题中没有足够的背景知识来知道这是否可行。