C#忽略字符串分割的一部分

时间:2019-01-15 08:09:07

标签: c#

在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的内容保留为一个完整的字符串(尽管包含逗号)。

有没有一种快速的方法可以忽略字符串拆分中该字段的内容(而不是阻止客户输入逗号)。

1 个答案:

答案 0 :(得分:4)

如果满足以下两个条件:

  1. 用逗号分隔的字符串中有固定数量的“字段”(例如3),并且
  2. 只有最后一个可以包含其他逗号,

然后,是的,您可以使用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/TestTest/Test/free text/ thanks,Test

但是,还有其他几种方法可以解决此问题:

  • 实际上,您拥有的是一个带有“逗号分隔值”(CSV)的字符串。如果您使用专业的CSV库(而不是String.Join / String.Split),则包含逗号的值将被引用,并且在提取值时这些逗号将被忽略。

  • 一个更简单的解决方案可能是完全使用不同的字符串格式:如果将值编码为JSON数组而不是CSV字符串,则JSON库将负责编码/解码包含特殊字符的值。

  • 很显然,如果您可以避免将所有值全部编码为单个字符串 ,而只需使用数组或其他数据结构,问题就会消失。但是,您的问题中没有足够的背景知识来知道这是否可行。