【问题标题】:handling special characters in textboxes and using splitters处理文本框中的特殊字符并使用拆分器
【发布时间】:2020-01-16 15:51:27
【问题描述】:

在使用字符串、特殊字符和分隔符时有什么好的选择?

例如

string name = "test, test";
string result = name + @"test, test";
List<string> list = new List<string>();

可以说我希望这个字符串拆分并放入每个项目的列表中。 在这种情况下,“名称是一个项目”,“测试,测试”是一个项目

所以我可以这样做:

String.split(list.ToArray(), ',');

我将使用逗号作为分隔符,但两个项目也已经包含它们。

结果应该是:

0 测试,测试
1 测试,测试

但由于它以逗号分隔,因此结果将是

0 测试
1 次测试
2 测试
3 测试

为了防止这种情况,我可以这样做

if(name.Contains(","))
{
    name = name.Replace(",","comma");
}

然后转换回来。 但我不喜欢这段代码,它有点像意大利面。 我能做的是做一个类翻译适配器和2个方法转换器和去转换器

但是你如何检查那些特殊字符或者在这种情况下你会建议什么。 因为我遇到过这样的情况,但有多个特殊字符,如 , 和 #。但我不想限制文本框。

【问题讨论】:

  • (1) 最好的选择是首先不要连接字符串。 (2) 你是如何将字符串添加到列表中的?
  • 为什么要在这里拆分?结果应该是“0 test test 1 test, test” 您列表中的第一项是您的姓名,您的第二项是新字符串。您只需将它们添加到列表中而无需加入它们。在您提出问题的方式中,您不需要拆分,因为您从一开始就有单独的字符串。
  • 这取决于您的数据来自哪里。如果您可以选择不首先将它们连接在一起(将它们直接放入列表中),那会更好。如果您希望处理用户输入的以字符分隔的数据,您可能只需要严格限制您接受的分隔符。这是 CSV 格式本身的一个关键问题。
  • 最好使用集合数据结构而不是连接然后切片。
  • String 没有这样的拆分方法。你的结果是“测试,测试,测试”,那么是什么让“测试,测试”成为一个项目而“测试,测试”成为另一个项目?这里的逻辑是什么?为什么不简单地将它们作为项目添加到您的列表中?

标签: c# .net-4.6.1


【解决方案1】:

三种方法。

使用不同的分隔符

在连接或拆分字符串时,不必使用, 分隔符。这就是为什么一些 csv 文件使用 ; 字符:来避免逗号问题。

String.Replace() 就像你已经做的那样

在单个字符串中替换您想要保留的所有字符。

使用正则表达式进行拆分

如果您知道您的字符串与\d\stest,\stest 具有相同的模式,那么您可以使用使用正则表达式拆分字符串的Regex.Split 函数。

【讨论】:

  • 感谢答案,但这正是问题所在,拆分发生在我无法访问其后端代码的 cms 系统内部。他们使用 , 作为它的分隔符,所以我试图找到一种翻译适配器。我可以使用正则表达式来查找特殊字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多