以加号为分隔符拆分含加号的字符串问题求助
解决带加号字符串的拆分问题
嘿,我一眼就看出你遇到的问题了——你用Regex.Split拆分字符串时直接用了+作为分隔符,但+是正则表达式里的特殊元字符(表示前面的匹配项出现1次或多次),直接用它会导致正则引擎抛出语法异常,这就是你看到错误的原因。
下面给你两种简单的解决方案,按需选择:
方案一:修正正则表达式(转义加号)
既然要用正则拆分,就得把特殊的+转义成普通字符。在正则里,我们用\+表示实际的加号,而在C#字符串里,如果不用@逐字字符串的话,反斜杠还需要再转义一次,所以推荐用@"\+"来写正则模式,更清晰。
修改后的代码:
string ColumnPlusLevel = "+-J10+-J10+-J10+-J10+-J10"; string strpluslevel = ColumnPlusLevel; // 转义加号,让正则匹配实际的+字符 string[] strpluslevel_lines = Regex.Split(strpluslevel, @"\+"); string strpluslevel_summa = ""; foreach (string line in strpluslevel_lines) { MessageBox.Show(line); strpluslevel_summa += line; } MessageBox.Show(strpluslevel_summa, "summa sumarum");
方案二:用string.Split替代正则(更简单高效)
如果只是单纯按加号拆分字符串,完全没必要动用正则——string.Split可以直接处理普通字符分隔,不需要考虑正则特殊字符的问题,性能也更好。
代码示例:
string ColumnPlusLevel = "+-J10+-J10+-J10+-J10+-J10"; string strpluslevel = ColumnPlusLevel; // 直接传入+字符作为分隔符 string[] strpluslevel_lines = strpluslevel.Split('+'); string strpluslevel_summa = ""; foreach (string line in strpluslevel_lines) { MessageBox.Show(line); strpluslevel_summa += line; } MessageBox.Show(strpluslevel_summa, "summa sumarum");
额外优化:移除空字符串
注意原字符串开头就是+,所以拆分后数组的第一个元素是空字符串,会弹出一个空的消息框。如果不想处理空元素,可以给Split加上StringSplitOptions.RemoveEmptyEntries参数:
// 拆分时自动移除空条目 string[] strpluslevel_lines = strpluslevel.Split(new char[] {'+'}, StringSplitOptions.RemoveEmptyEntries);
这样循环里就只会显示-J10这些有效内容了。
内容的提问来源于stack exchange,提问作者Tomas Nordström
相关产品推荐
相关产品推荐

