Tom*_*röm 4 c# string parsing split
我有一个包含加号(+)的字符串的问题.我想拆分该字符串(或者如果有其他方法来解决我的问题)
string ColumnPlusLevel = "+-J10+-J10+-J10+-J10+-J10";
string strpluslevel = "";
strpluslevel = ColumnPlusLevel;
string[] strpluslevel_lines = Regex.Split(strpluslevel, "+");
foreach (string line in strpluslevel_lines)
{
MessageBox.Show(line);
strpluslevel_summa = strpluslevel_summa + line;
}
MessageBox.Show(strpluslevel_summa, "summa sumarum");
Run Code Online (Sandbox Code Playgroud)
MessageBox用于我的测试目的.
现在...... ColumnPlusLevel字符串可以有非常多样的条目,但它始终是以加号开头的重复模式.即"+ MJ + MJ + MJ"或"+ PPL14.1 + PPL14.1 + PPL14.1"作为示例.(它来自另一个软件,我无法编辑该软件的输出)
如何找出重复的模式?在这个例子中,这是+ -J10或+ MJ或+ PPL14.1
在上面我的例子中,我通过仅使用MessageBox来测试它来显示结果,但我希望稍后将重复的模式存储在字符串中.
也许我使用Split做错了,也许有另一个解决方案.也许我以错误的方式使用Split.
希望你理解我的问题和我想要的结果.
谢谢你的建议.
/托马斯
如何找出重复的模式?
也许我完全不理解这个要求,但不是那么容易:
string[] tokens = ColumnPlusLevel.Split(new[]{'+'}, StringSplitOptions.RemoveEmptyEntries);
string first = tokens[0];
bool repeatingPattern = tokens.Skip(1).All(s => s == first);
Run Code Online (Sandbox Code Playgroud)
如果repeatingPattern是true你知道的模式本身first.
你能解释逻辑是如何工作的吗?
包含的行tokens.Skip(1)是LINQ查询,因此您需要using System.Linq在代码文件的顶部添加.既然tokens是string[]实现的,IEnumerable<string>您可以使用任何LINQ(扩展 - )方法.Enumerable.Skip(1)将跳过第一个,因为我已经将其存储在一个变量中,我想知道所有其他是否相同.因此All,false只要一个项目与条件不匹配,我就会使用哪个返回(因此一个字符串与第一个字符串不同).如果全部相同,则您知道存在已存储在变量中的重复模式first.